C++位移运算符左移怎么计算出int(有符号)所能表示的最大值?

查看:187
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆