int型取值越限再分析

 例1:

    long long mm;
    mm = 0x7fffffff+1 ;
    qDebug()<<mm;
输出结果是:-2147483648
分析:
long long 是占8个字节,0x7fffffff+1 是在long long 的范围内的。但是编译器显示是按照 int 32位类型来计算的。

原因是0x7fffffff 是在32位范围内,编译器默认是个32位整数,+1之后,就是-2147483648。

解决方法1:

强制类型转换:

    long long mm;
    mm = (long long)0x7fffffff+1 ;
    qDebug()<<mm;

输出结果:2147483648

解决方法2:
在常量后面加上后缀:
    long long mm;
    mm = 0x7fffffffLL+1 ;
    qDebug()<<mm;
输出结果:2147483648



发布了25 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/modi000/article/details/104037772