关于位移溢出,该如何处理?
小弟刚学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位而且是无符号才能表示出来)至于题目为什么这么处理,我觉得很诡异。