无符号数相减问题 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
相关文章推荐
- C语言的转换----你以为你精通C语言?
- c语言:求π的近似值
- C++格式化时间
- c++多线程编程
- C++自学随笔(2)
- C语言,设计出租车计价器,不能计算夜间加费用的版本
- C++与JAVA的不同之处
- c语言:break和continue的区别,编程举例说明
- c语言:输出100~200之间的不能被3整除的数。
- c语言:全系1000学生募捐,总数达到10万元结束,统计捐款人数,平均每人捐款数目
- 【Codeforces 282E】Sausage Maximization 中文题意&题解&代码(C++)
- c语言:键盘上回车的作用相当于\n,是一个字符
- leetcode191题 题解 翻译 C语言版 Python版
- C++迭代器
- 链表ADT C语言实现
- neuq oj 1017平面切割(特别版)C++
- ASCII编码
- neuq oj 1016 Roliygu and Yilan C++
- Chapter 1-03
- neuq oj 1015同因查找C++