读书人

关于位移溢出该如何避免

发布时间: 2012-05-20 16:03:12 作者: rapoo

关于位移溢出,该如何处理?
小弟刚学C语言,正在练习编个计算器,用的是VS2010,系统是32位的
当我运行位移运算时,如果溢出的话,程序就会崩溃,如:

C/C++ code
int main(){    long a = -123;    long b = 2;    printf("%l %s %l = %l\n", a, ">>", b, a>>b);


我看书上的例子说代码运行的结果应该是

-123 >> 2 = 4294967265

问题是程序每次都会崩溃……
溢出该如何处理呢?

[解决办法]
首先,请LZ看清题目,我严重怀疑LZ的题目有问题
负数的第一位绝对是1,然后>>只会补1不会补0,不可能变成正数(如果有符号的话)
其次,LZ的这个结果绝对是无符号的整数,这样看来,应该就是运行了算术位移(全部补1),然后将最后的结果当作unsigned来处理,否则显示不了这个数的(只有一半,LZ这个数绝对是要32位而且是无符号才能表示出来)至于题目为什么这么处理,我觉得很诡异。

读书人网 >C++

热点推荐