C语言有符号加减溢出
来源:互联网 发布:centos7打开8080端口 编辑:程序博客网 时间:2024/05/22 08:13
http://blog.csdn.net/youxin2012/article/details/36425791
C语言有符号加减溢出
分类: 深入理解操作系统2014-07-02 16:23 142人阅读 评论(1) 收藏 举报
溢出有符号数
sizeof(short int ) = 2;
测试用例
- #include <stdio.h>
- int main()
- {
- short int a = -32768;
- short int b = 0x8000;
- short int c = 0xffff;
- short int d = 0x8001;
- printf("%d, %d, %d, %d\n", a, b, c, d);
- a -= 1;
- b -= 1;
- c -= 1;
- d -= 1;
- printf("%d, %d, %d, %d\n", a, b, c, d);
- return 0;
- }
b, c, d的表示均为16进制表示,即机器的存储形式, 补码表示
负数溢出计算
理解一:(按机器存储来看,存储均为补码形式)
a 的补码形式(存储形式)为 1000 0000 ... 0000 a-1机器存储为 01111...1 为 32767的补码
理解二:(如下图)
a为最大负数, a -1 = a+ 2^32 - 1 = -32768 + 65536 -1 = 32767
图 一
另
b: 0xffff 为 -1的补码形式
补充:
short int 最大正数为 32767
测试 37267 + 1 = 01111...1 +1 = 100...0 (为 -32768的补码)
所以
short int a = 32767;
a += 1;
printf("%d\n", a); // -32768 从 图 一 同样可以看出
0 0
- C语言有符号加减溢出
- C语言有符号加减溢出
- 有符号整数加减溢出检测问题
- 有符号整数的加减运算,溢出判断
- C语言中 有符号数、无符号数、整数溢出
- C语言中 有符号数、无符号数、整数溢出
- C语言中 有符号数、无符号数、整数溢出
- C语言中,有符号数,无符号数,整数溢出
- 关于C有符号数数值溢出
- 程序猿之---C语言细节20(符号和有符号之间转换、两数相加溢出后数值计算)
- c语言有符号数取值范围
- C语言中无符号数运算判断溢出
- c 语言中无符号整型(unsigned)的溢出
- C语言中的无符号数和有符号数
- C语言中的有符号数与无符号数
- C语言无符号有符号比较问题总结
- c语言中的有符号数和无符号数
- c语言有符号数和无符号类型计算
- js 操作select和option
- Nginx调试汇总
- UVA 10868 - Bungee Jumping
- jquery 获取URL参数并转码
- Neutron印象1:neutron简介
- C语言有符号加减溢出
- 关于solaris系统下的客户端配置
- QQ绑定手机就安全???——————【Badboy】
- [Matlab]技巧笔记
- Windows下,当一个文件夹里包含几十万个1K左右的小文件时(举个例子),最有效的删除方法。
- jQuery学习笔记之十四------工具函数
- Android 多语言
- spring mongodb 更新Array中某个指定的document的field的value
- ZooKeeper的一个性能测试