C語言(4) 原碼 反碼 補碼與位運算

2021-07-06 00:25:50 字數 1350 閱讀 8552

機器碼與真值 

機器碼:乙個二進位制數,首位為這個數的符號位 

1為負符號  0為正符號

如:00000011 = 3

10000011 =-3

真值: 

去除符號位後剩餘二進位制數計算出來的值,稱為真值 

原碼、反碼、補碼(

計算中所有的二進位制都使用補碼表示

計算機使用補碼的原因:使計算更精確 只使用原碼或反碼計算會出現-0的情況使計算機更加簡便

計算機中沒有減法 只有加法 如(-1)=(+-1) 所以有補碼的出現

資料分為有符號數和無符號數,無符號數所有值為正數

所有無符號數(正數的原碼、反碼、補碼一致)

有符號數:(正數) 原碼==反碼==補碼

有符號數:(負數 )反碼==原碼(除符號位)所以數取反    補碼=反碼+1

原碼

取值範圍:-128到+127

11111111到01111111

反碼

正數 : 原碼=反碼

負數:除符號位(首位)外  所有的位數值取反

補碼

正數:原碼=反碼=補碼

負數:在反碼的基礎上+1

如果在賦值  必須在對應的二制制前加 0b

如 int a1=0b11111101

位運算(針對二進位制數的計算,計算後的值為補碼)

& 同1為1 有0為0

| 同0為0 有1為1

~ 變1為0  變0為1

^相同為0 不同為1

<< 左移 各二進位制位左移,高位丟棄,低位補0 向左移n位相當於 原數*(2的n次方)

值會變更大或更小

>> 右移 各二進位制位右移,低位丟棄,高位補符號位 向右移n位相當於 原數/(2的n次方)   右移位不會改變乙個數的正負值             值會變小

實用技能:

1、任何乙個數與1進行(&)操作  可以判斷乙個數是奇偶數

1= 00000001

只需要知道這個數的最後乙個數是0還是1 如果為1則為奇數 如果為0則為偶數

2、可以將任意數字設定為0

因為 &去處 有0為0 所以不管這個位上的值是多少 都會變為0

C語言 原碼反碼補碼與位運算

儘管能查到各種文獻,親自歸納出自己的體系還是更能加深對該知識的理解。目錄 一 機器數和真值 二 原碼,反碼和補碼的基礎概念 三 為什麼要使用原碼,反碼和補碼 四 原碼,補碼,反碼再深入 五 資料溢位測試 六 位運算的運算說明 七 位運算的簡單應用 一 機器數和真值 機器數 computer numb...

C語言原碼反碼補碼與位運算

目錄 一 機器數和真值 二 原碼,反碼和補碼的基礎概念 三 為什麼要使用原碼,反碼和補碼 四 原碼,補碼,反碼再深入 五 資料溢位測試 六 位運算的運算說明 七 位運算的簡單應用 一 機器數和真值 機器數 computer number 是數字在計算機中的二進位制表示形式 機器數有2個特點 一是符號...

C語言之原碼 反碼和補碼與位運算

目錄 機器數和真值原碼,反碼和補碼的基礎概念為什麼要使用原碼,反碼和補碼原碼,補碼,反碼再深入位運算的運算說明位運算的簡單應用 一 機器數和真值 機器數 computer number 是數字在計算機中的二進位制表示形式 機器數有2個特點 一是符號數位化,二是其數的大小受機器字長的限制 比如 十進位...