int类型在内存中的方式
起因:话说楼主在写一个将string类型转化为int类型的函数,就是把atoi()这个函数重写一下,当考虑到溢出这种情况的时候,写下了这样一行代码:
if((!minus&&num>0x7fffffff)||(minus&&num<ffffffff)){
num=0;
break;
}
注:bool minus 是判断该数字是正还是负。
等到测试的时候发现输入一个负数的字符串,得到的结果居然是0。
我敏锐的发掘,一定是num=0这句起了作用,但是按说不应该进入这个if语句啊。
于是我开始分析,int类型是带符号的类型,即第一位是符号位,当符号位为0的时候表示正数,当符号位为1的时候表示负数,那我输入的应该没错啊,0xffffffff不应该是十进制数2147483647这个数的负数模式-2147483647么??
楼主不解,于是开始试验。
int i=0xffffffff;
cout << i;
输出结果:-1
我就震惊了,明明应该是那么多位的负数,而且这么多个f就给我个-1,我真想问电脑你是怎么想的。后来我看了一下书,书上类似的判断用的是
minus&&num<80000000
于是我有些下了下面的代码
int i=0x80000000;
cout << i;
输出结果:-2147483648
|