C++位移运算符左移怎么计算出int(有符号)所能表示的最大值?
本文介绍了C++位移运算符左移怎么计算出int(有符号)所能表示的最大值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我尝试使用了1<<31,结果得到的值是int的最小值。。。
这是为什么?
解决方案
因为这里默认1
是int类型。而你的编译环境下,
int`是32位的。
那么这个1
的二进制表示为
0000 0000 0000 0000 0000 0000 0000 0000 0001
左移32位后
1000 0000 0000 0000 0000 0000 0000 0000 0000
因为是int
类型,也就是有符号的。所以第一位为符号位,这是一个负数。为什么是int
的最小值,因为是使用的是补码表示的。
如果需要移出最大值,使用下面的方式
((unsigned int)-1) >> 1
因为-1
的二进制表示就是0xffffffff
。转为无符号类型再移位,就不会有符号位的影响。
这篇关于C++位移运算符左移怎么计算出int(有符号)所能表示的最大值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文