C语言中有符号数与无符号数相加
来源:互联网 发布:数据库查询重复值 编辑:程序博客网 时间:2024/05/18 03:49
执行以下这段程序,输出的结果是什么?
#include <stdio.h>
int main()
{unsigned int a = 1;
signed int b = -2;
printf("%d\n", a + b);
printf("%u\n", a + b);
return 0;
}
计算机中的加法运算是通过加数补码相加实现的。
程序中,a为无符号整型数,其补码为0000 0001(方便起见,这里仅用8位表示,下文同理),起始位的“0”表示数值;b为有符号整型数,其补码为1111 1110,起始位的“1”表示正负。
将变量a和变量b的补码相加,得到1111 1111。
printf("%d\n", a + b)中,由于%d的作用,使a+b以有符号十进制的形式输出,此时,最高位的1为符号位,减一取反得到其原码,得到1000 0001,即十进制的-1;
printf("%u\n", a + b)中,由于%u的作用,使a+b以无符号十进制的形式输出,此时,最高位的1并非符号位,其表示数值大小,不用减一取反,得到1111 1111,实际Linux系统中,该数用4个字节表示,也就是说实际上这里有16个"1",即十进制数的4294967295(=2^32-1)。
综上,该段程序的输出结果为:
-1
4294967295
1 0
- C语言中有符号数与无符号数相加
- C语言中无符号数和有符号数相加问题
- C语言中无符号数和有符号数相加问题 .
- C语言中无符号数和有符号数相加问题
- C语言中无符号数和有符号数相加问题
- C语言中的有符号数与无符号数
- 无符号数与有符号数相加的结果
- C++中含有无符号类型的表达式——有符号数与无符号数相加
- 深入理解计算机系统学习之C语言中有符号与无符号数的转换
- 关于C语言中无符号与有符号数之间运算问题
- C语言中的无符号数和有符号数
- c语言中的有符号数和无符号数
- 无符号数与有符号数
- 有符号数与无符号数
- 有符号数与无符号数
- 有符号数与无符号数
- 有符号数和无符号数的相加问题
- C语言中的无符号数与有符号数混合运算时隐含转换问题
- 硬科技改变世界
- js设置cookie
- 微分方程的数值解法——常微分方程——欧拉法与改进欧拉法(2)
- c/c++整理--位运算与嵌入式编程(1)
- 递推——Codeforces 319A
- C语言中有符号数与无符号数相加
- 互联网注定被抛弃,未来30年属于硬科技!深层逻辑是这样的
- eclipse svn中打开xml文件出现Android xml editor cannot process this input 问题
- OpenCV 3.1.0支持向量机SVM
- OpenGL光照计算原理
- Mysql 约束
- Python3.6 IDLE常用快捷键
- 2010-2011 ACM-ICPC, NEERC, Southern Subregional Contest
- LINUX连接不上secucrt(ssh启动失败)