正數的補碼是原碼,負數的補碼是反碼加一。正數的反碼是原碼,負數的反碼是原碼符號位不變,其它位反轉。
以下實驗環境為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每一位取反,...