十進(jìn)制轉(zhuǎn)正整數(shù)轉(zhuǎn)二進(jìn)制應(yīng)該都會(huì),用C語言代碼簡單表示算法:
#include<stdio.h>
int main()
{
int dec=65535; /*positive decimalism number to binary number*/
int bin[32];
int i=0, j;
while (dec>1)
{
bin[i]=dec%2;
dec/=2;
i++;
}
bin[i]=dec;
for (j=i; j>=0; j--) /*print binary number*/
{
printf("%d",bin[j]);
}
printf("\n");
}
當(dāng)然也有另外一種簡單轉(zhuǎn)換方法:
#include<stdio.h>
int main()
{
int dec=65535;
char bin[32];
itoa(dec,bin,2); /*整型轉(zhuǎn)換為字符串的函數(shù),第一個(gè)參數(shù)是整型變量,
第二個(gè)是字符數(shù)組,用于存放字符串,第三個(gè)是進(jìn)制,“2” 表示輸出的字符串的進(jìn)制格式,
可以這樣記函數(shù):“int to arr” */
printf("%s\n", bin);
}
但是,十進(jìn)制負(fù)整數(shù)轉(zhuǎn)換為二進(jìn)制稍微復(fù)雜一些,分為三步:
一、原碼
例如一個(gè)十進(jìn)制數(shù) 5,二進(jìn)制原碼表示為:
00000000 00000000 00000000 00000101
大小為 4 字節(jié),每一個(gè) 0 或 1 表示一個(gè)比特位(bit),所以八位為一字節(jié),好像32位和64位系統(tǒng)都這樣。一字節(jié)用十進(jìn)制整數(shù)表示大小則是:2的8次方(256)。
表示為十六進(jìn)制是這樣:ff ff ff ff(f=2^4-1)
二、反碼
將二進(jìn)制原碼每一位取反,就是 0 變 1 ,1 變 0。
上面 5 的反碼表示為這樣:
11111111 11111111 11111111 11111010
三、補(bǔ)碼
將反碼最低位加 1 叫做補(bǔ)碼,那么 5 的補(bǔ)碼表示為:
11111111 11111111 11111111 11111011
注意反碼末位是
1時(shí)記得進(jìn)位。
所以十進(jìn)制數(shù) -5 的二進(jìn)制表示為:
11111111 11111111 11111111 11111011
所以 -1 在計(jì)算機(jī)中表示為全 1,就是:
11111111 11111111 11111111 11111111
我64位計(jì)算機(jī)中是這樣的:

20180404111248861.jpg