2 位運算
機器數是乙個數在計算機中的二進位制表示形式,機器數是帶符號的,在計算機中用乙個數的最高位(第一位)存放符號, 正數為0, 負數為1。例如1(帶符號即+1)在計算機中的最終表示形式為 0000 0001,依此類推-1的二進位制為 1000 0001。這種表示方式又叫做原碼,其中0的原碼為0000 0000。
注:為什麼1是0000 0001而不是 0001,在計算機中最小的儲存單位是位元組,1個位元組佔8位
如果是正數,反碼和原碼是一樣的,也就是1的原碼是0000 0001,它的反碼也是0000 0001.
如果是負數,反碼就是在原碼的基礎上保持符號位不變,其它依次取反,因為-1的原碼是 1000 0001,所以它的反碼是 1111 1110
如果是正數,補碼和原碼是一樣的,也就是1的原碼是0000 0001,它的補碼也是0000 0001.
如果是負數,補碼就是在反碼的基礎上加1,因為-1的原碼是 1000 0001,它的反碼是 1111 1110,所示它的補碼是1111 1111。
正數的原碼、反碼、補碼都是一樣的。
0的原碼、反碼、補碼都是0000 0000。
負數的反碼符號位表示符號的值不變,其它取反,補碼在反碼基礎上加1。
注:計算機中的運算都是以補碼的形式參與運算的!!!!!
計算機中的運算都是以補碼的形式參與運算的!
按位與運算規則是:相同位都為1,則為1,否則為0。
舉個例子:
例1:計算1&3的值是多少?
1的原碼是0000 0001,補碼為0000 0001
3的原碼是 0000 0011,補碼為0000 0011
通過上面的規則只有最後一位都是1(補碼參與運算,後同),所以最後的結果是 0000 0001,原碼也是0000 0001,也就是1,即1&3=1。
我們通過**展示:
func
main()
程式最終輸出結果是1。
例2:計算-1&3的值是多少?
-1原碼是1000 0001,反碼是1111 1110,補碼是1111 1111。3的原碼、反碼、補碼都是0000 0011。由於最後兩個都是1,所以結果是 0000 0011,原碼也是0000 0011,即為3。
按位或的運算規則是:只要有乙個為1,則為1,否則為0。
舉例:例1:1|3結果是多少?
1的補碼是0000 0001,3的補碼是0000 0011,所示結果為0000 0011,原碼為0000 0011,即為3。
**:
func
main()
例2:-1|3的結果是多少?
-1的補碼是:1111 1111,3的補碼是 0000 0011,所以結果是為1111 1111,原碼為1000 0001,即為-1。
按位異或的規則是:相同位相同則為0,不同則為1.
舉例:例1:1^3是多少?
1的補碼是0000 0001,3的補碼是0000 0011,結果是0000 0010,對應的原碼是0000 0010,即為2。
例2:-1^3的結果是多少?
-1的補碼是:1111 1111,3的補碼是 0000 0011,所以結果是為1111 1100,原碼為1000 0100,即為-4。
右移運算的規則是:低位(0)補齊,用符號位補移出的高位(1)。
舉例:例1:1>>5是多少?
1的補碼是0000 0001,右移5後為,0000 0000,符號位是0,補最後乙個1,結果還是 0000 0000,即0。
例2:3>>1是多少?
3的補碼是0000 0011,右移1後為,0000 0001,符號位是0,補倒數第二個1,結果是 0000 0001,即1。
左移運算的規則是:符號位不變
舉例:例1:-1<<5是多少?
-1的補碼是1111 1111,左移5是1110 0000,補碼是1101 1111原碼是1010 0000,即-32。
例2:3<<1是多少?
3的補碼是0000 0011,左移1後為是0000 0110,原碼是 0000 0110,即6。
例3:3<<6是多少?
3的補碼是0000 0011,左移1後為是0000 1100 0000,原碼是 0000 1100 0000,即192。
運算(原碼 補碼 反碼)
表示不帶符號向右移動二進位制數,移動後前面統統補0 兩個箭頭表示帶符號移動,沒有 這種運算子,因為左移都是補零,沒有正負數的區別。如 12 的二進位制為 1111 1111 1111 1111 1111 1111 1111 0100 12 3 即帶符號右移3位,結果是 1111 1111 1111 ...
位運算子,原碼 反碼 補碼
按位運算就把數字轉換為機器語言 二進位制的數字來運算的一種運算形式。按位與運算子 參與運算的兩個值,如果兩個相應位都為1,則該位的結果為1,否則為0 按位或運算子 參與運算的兩個值,只要其中有乙個為1,則該位結果就為1 按位異或運算子 當兩個對應的二進位相異時,結果為1 按位取反運算子 對資料的每個...
原碼 反碼 補碼,以及負數的位操作
1 原碼 將符號位數位化了的數,其中 用0 表示,用 1表示。反碼 正數的反碼表示與原碼表示一樣 負數的反碼表示是原碼表示的符號位不變,數值位逐位取反。補碼 正數的補碼表示與原碼表示一樣 負數的補碼表示是原碼表示的符號位不變,數值位逐位取反後最低位加1 反碼表示最低位加1 例 假如以八位二進位制表示...