1 << 31和-(1<<31)都是32为x86系统中的最小值!!!
2017-08-10 20:20
218 查看
32位x86系统中,分别执行如下两条语句
(1) int num = 1 << 31;
(2) int num = -( 1<<31 );
结果一样,均为-2147483648 。
也就是说1<<31==-(1<<31)=最小负数
原因在于:
1. 0x80 00 00 00 == 1 << 31,即-2147483648(最小负数)
2, 原码与补码之和为0,也就是a + ~a + 1 = 0. 所以 -a = 1+ ~a, -(0x80000000) = 1 + 0x7fffffff(最大正数) = 0x80000000
3.1 << 31 = > -2147483648,最小负数. -(-2147483648) = 2147483647 + 1 => 最大正数 + 1 = 最小负数 = -2147483648
其实问题等价于 为什么最大的正数 + 1 变成最小的负数。
(1) int num = 1 << 31;
(2) int num = -( 1<<31 );
结果一样,均为-2147483648 。
也就是说1<<31==-(1<<31)=最小负数
原因在于:
1. 0x80 00 00 00 == 1 << 31,即-2147483648(最小负数)
2, 原码与补码之和为0,也就是a + ~a + 1 = 0. 所以 -a = 1+ ~a, -(0x80000000) = 1 + 0x7fffffff(最大正数) = 0x80000000
3.1 << 31 = > -2147483648,最小负数. -(-2147483648) = 2147483647 + 1 => 最大正数 + 1 = 最小负数 = -2147483648
其实问题等价于 为什么最大的正数 + 1 变成最小的负数。
相关文章推荐
- c语言1左移32位(1<<32)是多少,左移-1位呢
- Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)
- Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)
- 将1左移31位等于多少(1<<31)
- <转>查看linux系统位数方法(32?64?)
- Error:CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86 (32 位)或 x64 (64 位)
- Xorg <= 1.10 remote root 0day exploit (32-bit x86)
- Gradle sync failed: CreateProcess error=216, 该版本的 %1 与您运行的 Windows 版本不兼容。请查看计算机的系统信息,了解是否需要 x86 (32
- 程序员修电脑必备: 使用Grub2制作一个多系统(WinPE与Linux, Android X86)启动的维护移动硬盘和U盘
- <转>Andriod: 去掉系统自带的Activity跳转动画
- 第10周项目3 小学生考试系统<2>
- <仅是自己做笔记。。。系列-5>给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数,要求下排每个数都是先前上排那十个数在下排出现的次数。
- CentOS 6.5 x86_64系统手动释放内存
- 将ubuntu 8.04 (server x86_64)的系统编码由英文改成中文,即由en_US.UTF-8改为zh_CN.GBK
- 利用U盘与163的yum源镜像网站安装Centos6.5 x86_64系统 推荐
- 64位系统、目标平台改->x86可解决的问题
- 对 (1<<1) 的研究
- 一般来说,x86 系列CPU 都是little-endian 的字节序,PowerPC 通常是Big endian
- 32位系统的X86到底能支持多大内存