1. 程式人生 > >計算機負數與正數的按位與操作

計算機負數與正數的按位與操作

負數的按位與運算: 
按位與運算是按照資料的內部二進位制形式進行運算的。若是兩個負數,則是按二進位制補碼形式進行按位與。所得結果若用有符號整型變數儲存,則內部形式仍看作二進位制補碼。如果用格式符%d輸出,輸出結果為十進位制真值(不應該稱為十進位制原碼)。 
例如:

  1. #include <stdio.h>

  2. main()

  3. {short int a=-2,b=-3,c;

  4. a=-2;//a的補碼1111 1111 1111 1110

  5. b=-3;//b的補碼1111 1111 1111 1101

  6. c=a&b;//c的補碼1111 1111 1111 1100

  7. printf("%hd\n",c);//c的真值-4

}short a=-109;//補碼 1111 1111 1001 0011 ,原碼 1000 0000 0110 1101short b=255c=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