目錄
概述【適合0基礎看的簡要描述】:
上述加粗下劃線的內容提取版:
從上述概述中提取的核心知識點,需背誦:
整數【包含整數,負整數和0】的原碼反碼補碼相互轉換的過程圖示:
過程詳細刨析:
運行結果展示:
概述【適合0基礎看的簡要描述】:
整型的表示方法:原碼,反碼,補碼
正整數的符號位為0,負整數的符號位為1
正整數的原碼=反碼=補碼;
負整數的原碼先寫出來,符號位不變,其他位按位取反就可以得到反碼,反碼+1即可得到補碼。
進行運算或者賦值時,輸入的都是十進制數,轉換成二進制即為該數的原碼,再轉換成補碼就可以進行賦值或運算了,賦值或運算結束后,將補碼轉換成原碼,最后將補碼轉換成十進制就是最終的結果了。
上述加粗下劃線的內容提取版:
十進制 -> 二進制源碼 -> 二進制補碼 -> 按位取反 -> 二進制原碼 -> 十進制
從上述概述中提取的核心知識點,需背誦:
按位取反:對一個數的二進制補碼進行取反。(0轉1,1轉0)。
原碼:在數值前面增加一位符號位,0表示正數,1表示負數。
反碼:正數的反碼與原碼相同;負數的反碼對其原碼逐位取反(符號位除外)。
補碼:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位+1。
整數【包含整數,負整數和0】的原碼反碼補碼相互轉換的過程圖示:
過程詳細刨析:
//按位取反【~】【cout函數默認整型是int,(由于int整型是占4個字節的,相當于32個bit位(不算符號位),所以二進制一共有32位數值位+最左邊的一位符號位【符號位若為0代表數的十進制是個非負數,符號位若為1代表數的十進制是個正數】)】
#include<iostream>
using namespace std;
int main() {cout << (~0) << endl;//0存儲在內存中:// 0b 0 00000000 00000000 00000000 00000000 【0的原碼=反碼=補碼】【從左往右數第一位是符號位】// 0b 0 00000000 00000000 00000000 00000000 【0的補碼】// ~0【0按位取反的過程:】 // 0b 1 11111111 11111111 11111111 11111111 0的補碼按位取反后的結果【從左往右數第一位是符號位,進行按位取反時,符號位也要取反】// 0b 1 11111111 11111111 11111111 11111110 補碼-1=反碼// 0b 1 00000000 00000000 00000000 00000001 反碼取反=原碼// 所以0的按位取反結果是-1//求一個數的相反數【(按位取反x)+1=(-x)】int a = 16;cout << (~a) + 1 << endl;// ~16【按位取反16的過程:(簡略寫:省略了一部分數值位,詳細的看上面0的按位取反)】// 0b 0 10000 16的原碼=反碼=補碼// 0b 1 01111 16的補碼按位取反=~16的補碼// 0b 1 01110 ~16的反碼// 0b 1 10001 ~16的原碼// ~16=-17// (~16+1)=-16return 0;
}