1. 程式人生 > >計算機中怎樣儲存負數的二進位制?

計算機中怎樣儲存負數的二進位制?

 位運算是指按二進位制進行的運算。在程式中,常常需要處理二進位制位的問題。C/C++語言提供了6個位操作運算子。這些運算子只能用於整型運算元,即只能用於帶符號或無符號的char,short,int與long型別。

    在實際應用中,建議用unsigned整型運算元,因為帶符號運算元可能因為不同機器結果不同。

    下面是C/C++位操作運算子列表,其中運算子優先順序為從上到下遞減,注意:<<,>>優先順序相同。

C/C++位操作運算子
操作符 功能 用法
~ 位求反 ~expr
<< 左移 expr1 << expr2
>> 右移 expr1 >> expr2
& 位與 expr1 & expr2
^ 位異或 expr1 ^ expr2
| 位或 expr1 | expr2

 

    程式碼示例如下:

#include<iostream>  
using namespace std;  
int main(){  
    unsigned short x=3,y=5;  
    cout<<"~x="<<(unsigned short)~x<<endl;//位求反  
    cout<<"~x="<<~x<<endl;//位求反  
    cout<<"x&y="<<(x&y)<<endl;//位與  
    cout<<"x^y="<<(x^y)<<endl;//位異或  
    cout<<"x|y="<<(x|y)<<endl;//位或  
    cout<<"x<<1="<<(x<<1)<<endl;//位左移  
    cout<<"y>>1="<<(y>>1)<<endl;//位右移  
    return 0;  
}  

 

    運算結果如下:

~x=65532

~x=-4

x&y=1

x^y=6

x|y=7

x<<1=6

y>>1=2

 

    程式碼解釋如下:
    short為16位整數,故x,y的二進位制表示如下:
    x=3(00000000 00000011)
    y=5(00000000 00000101)

 


      ~ 00000000 00000011
      = 11111111 11111100(65532或者-4)(至於為什麼同樣的二進位制位表示的數不一樣,這與計算機的數值表示有關,具體原因可搜尋“補碼”)


         00000000 00000011
      & 00000000 00000101
      = 00000000 00000001(1)


         00000000 00000011
      ^ 00000000 00000101
      = 00000000 00000110(6)


         00000000 00000011
      |  00000000 00000101
      = 00000000 00000111(7)


         00000000 00000011<<1
      = 00000000 00000110(6)


         00000000 00000101>>1
      = 00000000 00000010(2)