目录
求-5的补码(使用8位2进制来表示)-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)所以-5的补码是11111011
对于一个有符号整数,C编译程序将把该值(二进制代码)的最高位作为符号符号标志位(符号标志位是0,则表示为正数;若为1,则表示负数);而对于一个无符号整数,该数的最高位将被作为
数值位处理。
#include<stdio.h>
int main()
{
int a=-1;
printf("%d,%u\n",a,a);
return 0;
}
输出:-1,4294967295
补码的计算
补码的的符号位部分与原码相同,用状态0表示+,用状态1表示-,而数值部分与真值的符号有关:对于正数,数值部分与真值的数值部分相同;对于负数,数值部分为真值的数值部分按位取反,末位加1.
整数的补码
1)数学定义
x的补码严格定义为:
[x]补=
当n=7时
x=-1011=-0001001
[x]补=+x=(100000000+(-0001001))=11110111
2)例:
求-5的补码(使用8位2进制来表示)
-5对应正数5(00000101)→所有位取反(11111010)→加1(11111011)
所以-5的补码是11111011
-1以%d格式输出与以%u格式输出
-1的补码是11111111 11111111 11111111 11111111
将-1以%d格式输出(即按有符号整数处理)
1.第一位是1所以为负值
2.由补码再求补码
10000000 00000000 00000000 00000001
将-1以%u格式输出(即按无符号整数处理)
按原码处理=4294967295