计算机中的整数是用补码存储的,最高位为符号位,C语言也遵从同样的规则。
如果最高位为0则为正数,求值的时候,直接转为10进制即可。
最高位如果为1代表为负数,求值的时候,需要先把二进制的值按位取反,然后加1得到负数绝对值(相反数)的二进制码,然后转为10进制,加上负号即可。
以char型为例,char占一个字节,即8位。
对于二进制值B10110011转换十进制过程为:
先取反,即1变0,0变1,得到:
B01001100再加1:
B01001101转为十进制,即按照每位的权值乘上对应位的值,结果相加即可。
十进制值=0*2^7+1*2^6+0*2^5+0*2^4+1*2^3+1*2^2+0*2^1+1*2^0=0+64+0+0+8+4+0+1=77加上符号,最终的十进制值就是-77。
即B10110011表示的十进制值为-77。
在二进制数里,最高位0表示正数,1表示负数。
为了便于加减计算,正负数用补码来表示,正数的补码就是原码;负数的补码是原码的反码再加1。
如八位二进制数,它的表示数的范围是:
-128到+127。
+18
--------
00010010
-18
--------
反码为:
11101101
补码为:
11101110
十进制整数转换为二进制数的方法:
除2取余把十进制数15转化成二进制数15/2=7余17/2=3余13/2=1余11/2=0余1结果:
1111二进制转换为八进制的方法:
将二进制数从右到左,三位一组,高位不够补0例:
二进制数1110111011转换为八进制数:
001110111011(最前面补了两个0)结果为:
1673二进制转换为十六进制的方法:
二进制数转换为十六进制数的方法也类似,从右到左,四位一组,最高位不够补0如上题:
001110111011(最前面补了两个0)结果为:
3BB所以:
—617=-1001101001(二进制)=-269(十六进制)=-1151(八进制)—111=-1101111(二进制)=-6F(十六进制)=-157(八进制)—28654=-110111111101110(二进制)=-6FEE(十六进制)=-67756(八进制)
如果要在计算机中存储这些数,就要用原码或补码的形式,这时负号“-”用“1”表示。
—111的原码表示为:
11101111,—111的补码表示为:
10010001,这是8位二进制数,如果用十六位二进制数表示补码,是:
1111111110010001,再转换成八进制,就是:
177621,最前面那个“1”补两个“0”就是“001”,是八进制的“1”。