位運算筆記

2022-09-01 08:42:11 字數 2645 閱讀 5622

一、二進位制

二進位制的最高位是符號位:0表示正數,1表示負數

正數 的原始碼反碼,補碼,都一樣

負數的反碼=它的原始碼 符號 位不變,其它位取反(0->1,1->0)

負數的補碼=它的反碼+1

0的反碼補碼都是0

php沒有無符號數

在計算機 運算 的時候,都是以補碼的方式來運算的

例:-1 的原始碼 10000000 00000000 00000000 00000001

-1 的反碼 11111111 11111111 11111111 11111110

-1 的補碼 11111111 11111111 11111111 11111111

二、位運算

按位與& :兩位全為1,結果為1

按位或| :兩位有乙個為1,結果為1

按位異或^:兩位乙個為0,1個為1,結果為1

按位取反~:0->1,1->0

右移》:向右移動n次(除以2的n次方),低位溢位,並用符號位補溢位的高位,符號位不變

左移<<:向左移動n次(乘以2的n次方),低位補0,符號位不變

例&:2&3=?

2的補碼 00000000 00000000 00000000 00000010

3的補碼 00000000 00000000 00000000 00000011

2&3的補碼 00000000 00000000 00000000 00000010(補碼)

例|:2的補碼 00000000 00000000 00000000 00000010

3的補碼 00000000 00000000 00000000 00000011

2|3 00000000 00000000 00000000 00000011

例^:2的補碼 00000000 00000000 00000000 00000010

3的補碼 00000000 00000000 00000000 00000011

2^3 00000000 00000000 00000000 00000001

例~:~2=?

步驟:1.首先求出2的補碼,2是整數,所以 原碼=反碼=補碼 

00000000 00000000 00000000 00000010

2.取反後,為 ?的補碼

11111111 11111111 11111111 11111101

3.?的補碼-1,為 ?的反碼

11111111 11111111 11111111 11111100

4.?的反碼取反,為 ?的值

10000000 00000000 00000000 00000011 => -3

例》:1>>2=?

1的補碼 00000000 00000000 00000000 00000001

右移2位 00(《補位)00000000 00000000 00000000 000000(截斷)01

例》:-1>>2=?

-1的原碼 10000000 00000000 00000000 00000001

-1的反碼 11111111 11111111 11111111 11111110

-1的補碼 11111111 11111111 11111111 11111111

右移2位 11111111 11111111 11111111 11111111(補碼)

補碼-1 11111111 11111111 11111111 11111110(反碼)

取反碼 10000000 00000000 00000000 00000001

例<<:

1<<2=?

1的補碼 00000000 00000000 00000000 00000001

左移2位 00(截斷)000000 00000000 00000000 00000001(補位》)00

例<<:

-1<<2=?

-1的原碼 10000000 00000000 00000000 00000001

-1的反碼 11111111 11111111 11111111 11111110

-1的補碼 11111111 11111111 11111111 11111111

左移2位 11111111 11111111 11111111 11111100(補碼)

補碼-1 11111111 11111111 11111111 11111011(反碼)

取反碼 10000000 00000000 00000000 00000100

echo 6&3;//2

echo "

";echo 6|3;//7

echo "

";echo 6^3;//5

echo "

";echo ~6;//-7

echo "

";echo 6>>3;//0

echo "

";echo 6<<3;//48

echo "

";echo -6&3;//2

echo "

";echo -6|3;//-5

echo "

";echo -6^3;//-7

echo "

";echo ~-6;//5

echo "

";echo -6>>3;//-1

echo "

";echo -6<<3;//48

位運算筆記

10 1010 12 1100 與例如 以下按位比較,當兩個同時為1則為1,否則為0 10 1010 12 1100 結果為 8 1000 或例如 以下按位比較,當兩個有任何乙個為1則為1,否則為0 10 1010 12 1100 結果為 14 1110 非例如 以下按位比較,當兩個數不同時則為1否...

筆記 位運算

1 格式 x y 2 規則 對應位均為1時才為1,否則為0。例如,3 9 1 0011 1001 0001 3 主要用途 取 或保留 1個數的某些位,其餘各位置0。1 格式 x y 2 規則 對應位均為0時才為0,否則為1 3 9 11。例如,3 9 11 0011 1001 1011 3 主要用途...

位運算筆記

需要掌握的知識 原碼 反碼 補碼 原碼 是最簡單的機器數表示法。用最高位表示符號位,1 表示負號,0 表示正號。其他位存放該數的二進位制的絕對值。1010 最高位為 1 表示這是乙個負數,其他三位為 010 即 0 2 2 1 2 1 0 20 2 表示冪運算子 所以1010表示十進位制數 2 面臨...