數值 18 的 32 位表示法:00000000000000000000000000010010
其中前 31 位表示整數的值,第 32 位表示數值的符號,0 表示正數,1表示負數。
31 位中的每一位都表示 2 的冪。第一位表示 20,第二位表示 21,以此類推。
負數同樣以二進位製碼儲存,但使用的是二進位制補碼。需要經過下面三個步驟:
求 -18 的二進位製碼:
1、求 18 的二進位製碼:
0000 0000 0000 0000 0000 0000 0001 0010
2、將 0 和 1 互換
1111 1111 1111 1111 1111 1111 1110 1101
3、將二進位制反碼 + 1
1111 1111 1111 1111 1111 1111 1110 1101
+ 1
---------------------------------------
1111 1111 1111 1111 1111 1111 1110 1110
~ 表示,返回數值的反碼。
const num = 25;
num.tostring(2); // '11001'
// 00000000000000000000000000011001
const num2 = ~num;
console.log(num2); // -26,運算元的負數 -1
// 等同於
const num3 = -num - 1;
按位非是在數值表示的最底層執行操作,因此速度更快。
& 表示,將兩個數值的每一位對齊,根據下表中的規則,對相同位置上的兩個數進行 and 操作。
第乙個數值的位
第二個數值的位結果1
1110
0010
000對 1 和 4 進行位與操作。
1 & 4; // 0
// 1 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0001
// 4 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0100
// and --------------------------------
0000 0000 0000 0000 0000 0000 0000 0000
| 表示。
第乙個數值的位
第二個數值的位結果1
1110
1011
000對 1 和 4 進行位或操作。
1 | 4; // 5
// 1 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0001
// 4 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0100
// or --------------------------------
0000 0000 0000 0000 0000 0000 0000 0101
parseint('00000000000000000000000000000101', 2); // 轉十進位制,5
^ 表示。
第乙個數值的位
第二個數值的位結果1
1010
1011
000兩個數值位上,只有乙個 1 時,才返回 1。
對 1 和 4 進行位異或操作。
1 ^ 4; // 5
// 1 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0001
// 4 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0100
// xor --------------------------------
0000 0000 0000 0000 0000 0000 0000 0101
parseint('00000000000000000000000000000101', 2); // 轉十進位制,5
對 4 和 4 進行位異或操作。
4 ^ 4; // 0
// 4 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0100
// 4 的二進位制位
0000 0000 0000 0000 0000 0000 0000 0100
// xor --------------------------------
0000 0000 0000 0000 0000 0000 0000 0000
parseint('00000000000000000000000000000000', 2); // 轉十進位制,0
將數值的所有位向左移動指定的位數。
const val = 2; // 二進位制:10
const val2 = val << 3; // 二進位制:10000 十進位制:16
const val = 16; // 二進位制:10000
const val2 = val >> 3; // 二進位制:10 十進位制:2
// -16 的二進位製碼
11111111111111111111111111110000
// -16 >>> 3
00011111111111111111111111111110 // 右移後 以 0 填充左側的位
parseint('00011111111111111111111111111110', 2); // 十進位制:536870910
位操作符學習筆記
位操作符分為and or xor。and操作 如果兩個位都是1,結果為1,否則為0,操作符為 0 1000 101or操作 如果兩個位都是0,結果為0,否則為1,操作符為 0 1001 111xor操作 如果兩個位不同,結果為1,否則為0,操作符為 0 1001 110下面兩個表示式顯示了怎麼樣使用...
c語言操作符 位操作符 移位操作符
1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...
按位 操作符的學習
沒有按位計算的思維的程式設計師,不是乙個合格的程式設計師。所以程式猿們需要補足這塊的短板。2的8次方是256.也就是8個bit 8位 就能儲存乙個分割槽的數字。let ipstr 192.168.199.1 function str2ip ipstr console.log 轉化成int let s...