補碼的探索

2021-06-08 16:21:53 字數 702 閱讀 4643

正數的補碼是原碼,負數的補碼是反碼加一。正數的反碼是原碼,負數的反碼是原碼符號位不變,其它位反轉。

以下實驗環境為vs2010

unsigned int a = -10;

printf("0x%x", ~a);

輸出:0x9

解釋:當給無符號型a賦負值時,a自動變為有符號數,a在機器中的存在形式為0x80 00 00 0a的補碼形式,即0xff ff ff f6。按位取反(包括符號位)變為0x00 00 00 09。

unsigned int b = -10;

printf("0x%x", b);//顯示補碼

輸出:0xff ff ff f6

char c = -127;

printf("0x%x", c);

輸出:0xff ff ff 81

解釋:雖然是char型,但在32為系統中還是按照32位資料進行處理的,即-127的原碼為0x80 00 00 7f,反碼為0xff ff ff 80,補碼為0xff ff ff 81。

char d = -128;

printf("0x%x", d);

輸出:0xff ff ff 80

解釋:int型-128的原碼0x80 00 00 80,反碼0xff ff ff 7f,補碼0xff ff ff 80,與char型相同。

綜上:計算機以補碼的形式進行儲存顯示。可以將char型完全當成int型。

1的補碼及2的補碼

一 計算機的負數表示 二 1的補碼one s complement 反碼 三 2的補碼two s complement 補碼 資料在計算機中由乙個乙個的0,1位元表示,所以在表示負數的時候,不能直接新增符號 來表示這是個負數,必須採用一些規範或者約定來區分正數和負數。有四種比較有名的表示負數的方法 ...

128的補碼及原碼 反碼 補碼

乙個位元組佔8位 乙個字長為n的機器數能表示不同的數字的個數是固定的2 n個,n 8時2 n 256 用來表示有符號數,數的範圍就是 2 n 1 2 n 1 1,n 8時,這個範圍就是 128 127。用來表示無符號數,就不需要用一位來表示符號位,n位機器數全部用來表示是數值,這時表示數的範圍就是0...

原碼 反碼 補碼和 2147483648的補碼表示

在網上看到乙個挺奇怪的說法 乙個整數的原碼是這個數的絕對值的原碼,然後他就得出了 00000000 00000000 00000000 00000101 是 5的 原碼 然後他又說反碼就是32位的每一位都取反 比如 將00000000 00000000 00000000 00000101每一位取反,...