补码:电脑32位
十进制转二进制(以十六进制输出)
#include <stdio.h>
int main(void)
{
int i;
i = -11;
printf("%#X\n",i);
return 0;
}
结果为0XFFFFFFF5
1.求正整数的二进制码
除2取余,直至商为零,余数倒数排序
2.求负整数的二进制码
除2取余,然后将所有位取反,末尾加1,左边补1
例:以上代码
-11先转换为二进制,再以16进制输出
(11)D=(1011)B
取反:0100 ——>末尾加1 (0101)B=(5)X
计算机是32位,所以十六进制为0xFFFFFFF5,四位为一组
__________________________________________________________________
已知二进制转十进制
如果首位为0,则表明是正整数,按普通方法来求
如果首位是1,则表明是负整数,所有位取反加1,所得数字就是该负数的绝对值(符号位不变,其余各位取反,最后+1)
#include <stdio.h>
int main(void)
{
int i;
i = 0xFFFFFFEF;
printf("%d\n",i);
return 0;
}
结果是-17
二进制是11101111转成16进制0xFFFFFFEF
11101111取反加一为(00010001)B=(11)X=(17)D=-17
步骤二进制取反+1转换为十六进制再转换10进制加负号
负数的补码的求法是反码+1
1. 原码
原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如:如果是8位二进制:
[+1]原= 0000 0001
[-1]原= 1000 0001
第一位是符号位,因为第一位是符号位,所以8位二进制数的取值范围就是:(即第一位不表示值,只表示正负。)
[1111 1111 , 0111 1111]
即[-127 , 127]
2. 反码
反码的表示方法是:
正数的反码是其本身;
负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
[+1] = [0000 0001]原= [0000 0001]反
[-1] = [1000 0001]原= [1111 1110]反