計算機負數與正數的按位與操作
阿新 • • 發佈:2018-12-09
負數的按位與運算:
按位與運算是按照資料的內部二進位制形式進行運算的。若是兩個負數,則是按二進位制補碼形式進行按位與。所得結果若用有符號整型變數儲存,則內部形式仍看作二進位制補碼。如果用格式符%d輸出,輸出結果為十進位制真值(不應該稱為十進位制原碼)。
例如:
-
#include <stdio.h>
-
main()
-
{short int a=-2,b=-3,c;
-
a=-2;//a的補碼1111 1111 1111 1110
-
b=-3;//b的補碼1111 1111 1111 1101
-
c=a&b;//c的補碼1111 1111 1111 1100
-
printf("%hd\n",c);//c的真值-4
}
short a=-109;//補碼 1111 1111 1001 0011 ,原碼 1000 0000 0110 1101
short b=255
c=a&b //149
----------------
下面是另外一篇文章
負數的運算是以補碼形式進行的,如果運算結果首位為1,結果也需要求一次補碼
如何求補碼
正數的補碼還是自身,負數的補碼:首位的1不變,其餘位取反加1(更方便的一種記法是從右向左遇到第一個1為止,這個1前面的位取反,首位不動)
以-10為例:
1000 0000 0000 0000 0000 0000 0000 1010
- 1
最右邊的1和1後面的不變,首位不變,其餘位取反:
1111 1111 1111 1111 1111 1111 1111 0110
- 1
負數的異或運算
以 10 ^ -10
為例:
0000 0000 0000 0000 0000 0000 0000 1010
^ 1111 1111 1111 1111 1111 1111 1111 0110
= 1111 1111 1111 1111 1111 1111 1111 1100
- 1
- 2
- 3
得到的結果首位為1,所以再求一次補碼:
1000 0000 0000 0000 0000 0000 0000 0100
- 1
即 -4