在2147483647的边缘疯狂试探
Posted fspark
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在2147483647的边缘疯狂试探相关的知识,希望对你有一定的参考价值。
2147483648的缘起
最近其实一直都在是摸鱼的状态,编程也很少了。其实自己真的想有一段时间啥都别顾及的只是敲代码就行了的时光。说我怠惰也好,现在感觉就是我干什么都有一种没有用的感觉。
这次碰到的这个问题源于我们C 语言课上的实验
#include <stdio.h>
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
",c);
}
return 0;
}
int max(int x,int y)
{
int z;
if (x>y) z=x;
else z=y;
return z;
}
本来也没什么,只是突然间有位老哥好像发现了新大陆
”哦豁,爆掉了“= =,输入超大的数最后反而会输出一个根本不在两者之间的负数。
立刻丢掉了无聊的实验内容,开始研究这个问题的本质。其实就是数据溢出吧。
实验内容
其实之前还是了解了一下,int的范围在vc6里是-231~231-1,也就是-2147483648~2147483647。于是便开始疯狂试探。
的确是2147483647的力量。
但现在有一个新的疑问便是 -1141710350 又是从何而来的呢?
监视变量
说来惭愧...我之前编程为了查看一个变量里的内容,不停的用print,messagebox。。
知道现在知道可以用监视
可以发现一赋值123412341234就立马变成了-1141710350
这时还是请出程序猿计算器吧。。
从上面的测试可以看出,这个数是与123412341234有关的
而它的二进制编码是?0001 1100 1011 1011 1111 0010 1110 0001 1111 0010?
而如果只保留32位的话便成了1011 1011 1111 0010 1110 0001 1111 0010
这里恰恰就是 -1141710350 的二进制代码。
ps:位键盘真好玩= =
以上是关于在2147483647的边缘疯狂试探的主要内容,如果未能解决你的问题,请参考以下文章
5000张高清壁纸大图(手机用),用Python在法律的边缘又试探了一把
疯狂试探mysql单表insert极限:已实现每秒插入8.5w条数据
拿爱奇艺练手Python爬虫,是在法律边缘试探吗?爬虫技巧学习