负数的二进制和十进制之间的转换:
1.
十进制负数转换为二进制的方法为:
1、将十进制转换为二进制数。
2、对该二进制数求反。
3、再将该二进制数加1.
总之就是将十进制数转换为二进制数求补码即为结果。比如:
-32
第一步:32(10)=00100000(2)
第二步:求反:11011111
第三步:加1:11100000
所以-32(10)=11100000(2)
2.
计算机中的整数是用补码存储的,最高位为符号位,C语言也遵从同样的规则。
如果最高位为0则为正数,求值的时候,直接转为10进制即可。
最高位如果为1代表为负数,求值的时候,需要先把二进制的值按位取反,然后加1得到负数绝对值(相反数)的二进制码,然后转为10进制,加上负号即可。
以char型为例,char占一个字节,即8位。
对于二进制值B10110011转换十进制过程为:
先取反,即1变0,0变1,得到:
B0100 1100
再加1:
B0100 1101
转为十进制,即按照每位的权值乘上对应位的值,结果相加即可。
十进制值=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。