成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

按位操作符

caiyongji / 1538人閱讀

摘要:將任一數(shù)值與執(zhí)行按位與操作,其結(jié)果都為。中應(yīng)用判斷奇偶性偶數(shù)奇數(shù)按位異或規(guī)則每一位都不同,結(jié)果才為將任一數(shù)值與進(jìn)行異或操作,其結(jié)果為。

位運(yùn)算在算法中很有用,速度可以比四則運(yùn)算快很多。

To2orTo10

JS中十進(jìn)制轉(zhuǎn)二進(jìn)制: (val).toString(2)
JS中二進(jìn)制轉(zhuǎn)十進(jìn)制: parseInt(val, 2)

JS中規(guī)定安全整數(shù)的范圍是-2^53~2^53,所以大于9007199254740991的數(shù)進(jìn)制轉(zhuǎn)換會(huì)存在精度問題

讀取的十進(jìn)制是根據(jù)原碼來讀取,而在內(nèi)存中,數(shù)值都是以二進(jìn)制補(bǔ)碼形式保存的

十進(jìn)制-5的二進(jìn)制表示為:1000,0101(原碼)
原碼除符號(hào)位外,全部取反再+1:11111011(補(bǔ)碼,內(nèi)存存儲(chǔ)形式)

~-5的結(jié)果:

正數(shù)的補(bǔ)碼和原碼一樣

負(fù)數(shù)原碼補(bǔ)碼轉(zhuǎn)換規(guī)則:
符號(hào)位不動(dòng),從低位往高位數(shù),遇到第一個(gè)1之前,包括第一個(gè)1不作任何取反,之后,每位都取反。避免了原碼轉(zhuǎn)反碼再轉(zhuǎn)補(bǔ)碼的繁瑣。

{原碼符號(hào)位不變} + {數(shù)值位按位取反后+1}

{原碼符號(hào)位不變} + {數(shù)值位從右邊數(shù)第一個(gè)1及其右邊的0保持不變,左邊安位取反}

// 7
00000111 // 原碼
00000111 // 補(bǔ)碼

// -6
10000110 // 原碼
11111010 // 補(bǔ)碼 // {原碼符號(hào)位不變} + {數(shù)值位從右邊數(shù)第一個(gè)1及其右邊的0保持不變,左邊安位取反}

// -6
10000110 // 原碼
11111001 // 反碼
11111010 // 補(bǔ)碼 // {原碼符號(hào)位不變} + {數(shù)值位按位取反后+1}

進(jìn)行按位操作,都是針對(duì)補(bǔ)碼去操作。

十進(jìn)制轉(zhuǎn)二進(jìn)制
1  1
2  10
3  11
4  100
5  101
6  110
7  111
8  1000
64
64 / 2 = 32 -> 0
32 / 2 = 16 -> 0
16 / 2 = 8 -> 1000
// 轉(zhuǎn)為二進(jìn)制為:100000

// 十進(jìn)制 33 可以看成是 32 + 1 ,并且 33 應(yīng)該是六位二進(jìn)制的(因?yàn)?33 近似 32,而 32 是 2 的五次方,所以是六位),那么 十進(jìn)制 33 就是 100001 ,只要是 2 的次方,那么就是 1否則都為 0
二進(jìn)制轉(zhuǎn)十進(jìn)制

二進(jìn)制100001同理,首位是2^5(1) ,末位是2^0(0),相加得出33(只要是 2 的次方,那么就是 1否則都為 0)

按位非(~) 取反

1(原碼)轉(zhuǎn)二進(jìn)制: 00000001

按位取反: 11111110

將符號(hào)位之外的其它數(shù)字取反[符號(hào)位(即最高位)為1(表示負(fù)數(shù))]: 10000001

末位加1取其補(bǔ)碼: 10000010

轉(zhuǎn)換會(huì)十進(jìn)制: -2

00000001 // 原碼
11111110 // 按位取反
10000001 // 除符號(hào)位取反
10000010 // +1

對(duì)任一數(shù)值 x 進(jìn)行按位非操作的結(jié)果為 -(x + 1), 例如:2 -> -3

JS中的作用是配合indexOf()
indexOf找到一個(gè)給定元素的第一個(gè)索引,如果不存在,則返回-1, -1取反操作等于0,其它取反操作不等于0

if (~arr.indexOf(v))    if (arr.includes(v))
if (~str.indexOf(v))    if (str.indexOf(v) !== -1) 
按位或(|)

規(guī)則:其中一位為 1,結(jié)果就是 1

8 | 7
00001000
00000111
----------
00001111 // 15

任一數(shù)值 x 與 0 進(jìn)行按位或操作,其結(jié)果都是 x:

6 | 0
00000110
00000000
---------
00000110 // 6

任一數(shù)值 x 與 -1 進(jìn)行按位或操作,其結(jié)果都為 -1:

6 | -1
00000110
10000001
---------
10000111

將任一數(shù)值 x 與 0 進(jìn)行按位或操作,其結(jié)果都是 x。將任一數(shù)值 x 與 -1 進(jìn)行按位或操作,其結(jié)果都為 -1

JS中向下取整Math.floor, 返回小于或等于一個(gè)給定數(shù)字的最大整數(shù)

num | 0    or       Math.floor(num)
Math.floor(45.95);  // 45.95 | 0
// 45
Math.floor(45.05);  // 45.05 | 0
// 45 
Math.floor(4);  // 4 | 0
// 4 
Math.floor(-45.05);  // -45.05 | 0
// -46 
Math.floor(-45.95);  // -45.95 | 0
// -46
1 | 0 ;                       // 1

1.1 | 0 ;                     // 1

"asfdasfda" | 0 ;             // 0

0 | 0 ;                       // 0

(-1) | 0 ;                    // -1

(-1.5646) | 0 ;               // -1

[] | 0 ;                      // 0

({}) | 0 ;                    // 0

"123456" | 0 ;            // 123456

1.23E2 | 0;               // 123

1.23E12 | 0;              // 1639353344

-1.23E2 | 0;              // -123

-1.23E12 | 0;             // -1639353344
按位與(&)

規(guī)則:每一位都為 1,結(jié)果才為 1

8 & 7 // 0
00001000
00000111
00000000 // 0

將任一數(shù)值 x 與 0 執(zhí)行按位與操作,其結(jié)果都為 0。將任一數(shù)值 x 與 -1 執(zhí)行按位與操作,其結(jié)果都為 x。

JS中應(yīng)用:
判斷奇偶性

10 & 1 // 0 偶數(shù)
11 & 1 // 1 奇數(shù)
按位異或 (^)

規(guī)則:每一位都不同,結(jié)果才為 1

8 ^ 7 // 15
1000
0111
1111 // 15

8 ^ 8 // 0
1000
1000
0000 // 0

將任一數(shù)值 x 與 0 進(jìn)行異或操作,其結(jié)果為 x。將任一數(shù)值 x 與 -1 進(jìn)行異或操作,其結(jié)果為-x

不進(jìn)位加法:
根據(jù)按位異或的特性就是不進(jìn)位加法8 ^ 8 = 0 如果進(jìn)位了,就是 16 了,所以只需要將兩個(gè)數(shù)進(jìn)行異或操作,然后進(jìn)位。那么也就是說兩個(gè)二進(jìn)制都是1的位置,左邊應(yīng)該有一個(gè)進(jìn)位1

JS中應(yīng)用:
交換二個(gè)數(shù)值

let a = 3
let b = 4
a ^= b
b ^= a
a ^= b
有符號(hào)右移 (>>)

將第一個(gè)操作數(shù)向右移動(dòng)指定的位數(shù),向右被移出的位被丟棄,正數(shù)則在高位補(bǔ)零,負(fù)數(shù)則補(bǔ)1

9 >> 2

00001001 // 移動(dòng)二位, 以0填充
00000010 // 2

-9 >> 2
10001001 // 原碼
11110111 // 補(bǔ)碼
11111101 // 補(bǔ)碼右移
10000011 // 原碼 // -3

公式:int v = a / (2 ^ b)

JS中的應(yīng)用:
任何小數(shù) 把它>> 0可以取整

9.99 >> 0 // 9
9 >> 0 // 9
9.19 >> 0 // 9

除法運(yùn)算:

9 >> 1 // 4
8 >> 1 // 4

二分算法中取中間值:

13 >> 1 // 6
12 >> 1 // 6
topic
兩個(gè)數(shù)不使用四則運(yùn)算得出和
a + b = (a ^ b) + ((a & b) << 1)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/100460.html

相關(guān)文章

  • 【STM32】位操作、按位與、按位或、按位異或、取反、左移、右移等基礎(chǔ) C 語言知識(shí)補(bǔ)充

    摘要:總結(jié)對(duì)于原二進(jìn)制數(shù)來說,是不變,是反轉(zhuǎn)。的位數(shù)對(duì)應(yīng)原二進(jìn)制數(shù)的位數(shù),對(duì)各位進(jìn)行屏蔽,全部置。左移左移與右移比較類似,是將目標(biāo)二進(jìn)制數(shù)字向左右移動(dòng)相應(yīng)的位數(shù)。語言中的邏輯運(yùn)算符按位與,按位或,按位異或,取反,左右移位不完全手冊(cè)立創(chuàng)開源 ...

    waruqi 評(píng)論0 收藏0
  • 淺談JavaScript位作符

    摘要:有符號(hào)的右移操作符由兩個(gè)大于符號(hào)表示這個(gè)操作符的含義就是將數(shù)值的位向右移指定的位數(shù)同時(shí)保留符號(hào)位的值正負(fù)號(hào)標(biāo)記有符號(hào)的右移操作符與左移操作符剛好相反比如向右移動(dòng)位就是同樣的在移位的過程中也會(huì)出 位操作符的基本概念 因?yàn)镋CMAscript中所有數(shù)值都是以IEEE-75464格式存儲(chǔ),所以才會(huì)誕生了位操作符的概念. 位操作符作用于最基本的層次上,因?yàn)閿?shù)值按位存儲(chǔ),所以位操作符的作用也就是...

    fasss 評(píng)論0 收藏0
  • websocket 二進(jìn)制數(shù)據(jù)傳輸基礎(chǔ)準(zhǔn)備工作

    摘要:例如,十進(jìn)制數(shù),用二進(jìn)制表示則為。按位操作符操作數(shù)字的二進(jìn)制形式,但是返回值依然是標(biāo)準(zhǔn)的數(shù)值。不同為真相同為假二進(jìn)制按位異或運(yùn)算從左到右按位非為真,為假對(duì)每一項(xiàng)進(jìn)行非操作,遇真則假,遇假則真。 二進(jìn)制與十六進(jìn)制 二進(jìn)制用 0 1 表示 2= 10十六進(jìn)制 前綴0x 用0123456789ABCDEF表示 2= 0x2二進(jìn)制與十六進(jìn)制的轉(zhuǎn)換十六進(jìn)制的每位 等于二進(jìn)制的四位 十六進(jìn)制 0x...

    LeviDing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<