博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在2147483647的边缘疯狂试探
阅读量:5311 次
发布时间:2019-06-14

本文共 975 字,大约阅读时间需要 3 分钟。

2147483648的缘起

最近其实一直都在是摸鱼的状态,编程也很少了。其实自己真的想有一段时间啥都别顾及的只是敲代码就行了的时光。说我怠惰也好,现在感觉就是我干什么都有一种没有用的感觉。

这次碰到的这个问题源于我们C 语言课上的实验

#include 
int main(){ int max(int x,int y); int a,b,c; while (1){ printf("input a&b: "); scanf ("%d,%d",&a,&b); c=max(a,b); printf("max=%d\n",c);} return 0;}int max(int x,int y){ int z; if (x>y) z=x; else z=y; return z;}

本来也没什么,只是突然间有位老哥好像发现了新大陆

1503884-20181101000924342-1384751923.png

”哦豁,爆掉了“= =,输入超大的数最后反而会输出一个根本不在两者之间的负数。

立刻丢掉了无聊的实验内容,开始研究这个问题的本质。其实就是数据溢出吧。

实验内容

其实之前还是了解了一下,int的范围在vc6里是-231~231-1,也就是-2147483648~2147483647。于是便开始疯狂试探。

1503884-20181101000958073-2061434943.png

1503884-20181101001017234-764226143.png

的确是2147483647的力量。

但现在有一个新的疑问便是 -1141710350 又是从何而来的呢?

监视变量

说来惭愧...我之前编程为了查看一个变量里的内容,不停的用print,messagebox。。

知道现在知道可以用监视
1503884-20181101001234094-1247146668.png
可以发现一赋值123412341234就立马变成了-1141710350

这时还是请出程序猿计算器吧。。

从上面的测试可以看出,这个数是与123412341234有关的

而它的二进制编码是‭0001 1100 1011 1011 1111 0010 1110 0001 1111 0010‬

而如果只保留32位的话便成了1011 1011 1111 0010 1110 0001 1111 0010 这里恰恰就是 -1141710350 的二进制代码。

ps:位键盘真好玩= =

ps:位键盘真好玩= =

转载于:https://www.cnblogs.com/StarSpark/p/9886727.html

你可能感兴趣的文章
TCL:表格(xls)中写入数据
查看>>
Oracle事务
查看>>
String类中的equals方法总结(转载)
查看>>
属性动画
查看>>
标识符
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
快来熟练使用 Mac 编程
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
使用pager进行分页
查看>>
UVA - 1592 Database
查看>>
Fine Uploader文件上传组件
查看>>
javascript中的传递参数
查看>>
objective-c overview(二)
查看>>
python查询mangodb
查看>>
consonant combination
查看>>
驱动的本质
查看>>
Swift的高级分享 - Swift中的逻辑控制器
查看>>