您的位置:首页 > 编程语言 > C语言/C++

无符号数相减问题 C语言

2016-02-12 03:17 1136 查看
int main()
{
    unsigned int a=50;
    unsigned int b=100;
    printf("%u",a-b);
    return 0;
}

结果是4294967246

为什么呢?

实际上 CPU里只有加法器 没有减法器 做a-b运算时,实际上是做了a+(~b)+1

因为计算机运算采用补码运算

a-b=a[补码]+(-b)[补码]

50的二进制是:
00000000|00000000|00000000|00110010

100的二进制是:
00000000|00000000|00000000|01100100

50的补码是
00000000|00000000|00000000|00110010

-100的补码是
11111111|11111111|11111111|10011100

补码相加得到的结果是
11111111|11111111|11111111|11001110=4294967246

由于a-b得到的是无符号整形,所以原码与补码相等 结果自然为4294967246
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: