关于0x80000000为什么等于-2147483648和负数在内存上储存的问题
来源:互联网 发布:王诺诺 知乎 编辑:程序博客网 时间:2024/06/04 20:14
1·先说明负数怎么储存
(1)十进制负数是以其补码储存在内存上。
验证:求-8在内存上以二进制形式1的个数
思路是:拿变量,令值为1,与-8的二进制码的每一位做与运算,若与运算结果为1,则该位为1。
代码:
结论:
输入-8,结果为29。
在32位系统上,-8的储存
-8的储存是以-8的补码,储存在内存上。
-8的原码 1000 0000 0000 0000 0000 0000 0000 1000
取反 由于第一位是符号位 不用改变 得:1111 1111 1111 1111 1111 1111 1111 0111
补码=反码+1 得::1111 1111 1111 1111 1111 1111 1111 1000
得到1的数量正好为29,所以-8的补码就是-8储存在内存上的二进制码
(2)但是在十六进制,负数在内存中储存的是原码
验证:
对int test = 0x80000001 (对应十进制为-1) 检查其内存上的1的个数,发现只有2个1
故内存上原码为 1000 0000 0000 0000 0000 0000 0000 0001.
对十六进制的-8也是2个1
(3)我们来看看0x80000000的输出
0x80000000 的二进制位
原码 1000 0000 0000 0000 0000 0000 0000 0000
若最高位为符号位,则为-0,可是输出int i = 0x80000000 发现i= -(2^31)
原因是在十六进制中负数的二进制原码的最高位是符号位,后面的31位为序号位,不是值位。1后面的000 0000 0000 0000 0000 0000 0000 0000,表示序号1,表示负数中,从小到大的第一位。
由于int的最小值为-2^31,排在负数从小到大的序号1,所以int i = 0x80000000 输出为 -(2^31)
我们来看看0xFFFFFFFF
原码 1111 1111 1111 1111 1111 1111 1111 1111
最高位为1 ,为负数,序号位为第(2^31)-1位 (111 1111 1111 1111 1111 1111 1111 1111=(2^31-1) 所以0xFFFFFFFF为负数从小到大 第2^31-1位 ,即
-2^31+2^31-1= -1
输出int i = 0xFFFFFFFF 为 -1 符合
(4)十进制的补码也符合 符号位+序号位的原则
就拿-8来做例子:
-8的补码:1111 1111 1111 1111 1111 1111 1111 1000 可以看出最高位为1 序号位为第2^(31)-8位,(111 1111 1111 1111 1111 1111 1111 1000 = 2^(31)-8 )
则该补码表示的值为2^31- 2^(31)-8 = -8 符合
花费了2~3个小时去查阅相关内容,发现,目前较少相关信息,总结了一下发在这,是对自己学习成果的尊重,同时也希望对大家有点用。
觉得写得不错的点个赞,留个言。欢迎指正
------------------------------------------------------------------------
相关知识点补充:
十六进制用最高位作为符号位,1位负数,0为正数。
负数的位右移运算:
原则:若右移的数字为负值,则向右移动N位同时N个1补充在左边
若为正值,则以N个0补充在左边
- 关于0x80000000为什么等于-2147483648和负数在内存上储存的问题
- 关于0x80000000为什么等于-2147483648和负数在内存上储存的问题
- 关于负数在内存表现形式
- 查找数据在内存的储存地址
- 关于C语言负数在内存中的存储
- 关于C语言负数在内存中的存储
- 负数在内存中的存储
- 有符号的整数-负数在内存的存放形式
- 有符号的整数-负数在内存的存放形式
- 有符号的整数-负数在内存的存放形式
- 关于文件在内存中读写的问题
- C++和JAVA在内存管理上的特点
- float与double在内存中储存的形式
- 关于十六进制和八进制负数的问题
- 在内存上运行的操作系统
- JAVA 程序在内存上的分布
- 浮点数在内存上的表示
- c++:变量在内存上的分布
- centos 6 安装 mysql
- 超简单的listview加载数据
- git上传,现有仓库克隆功能
- Mac启动磁盘不能被分区或恢复成单个分区
- javascript setInterval和setTimeout的this问题
- 关于0x80000000为什么等于-2147483648和负数在内存上储存的问题
- java b2b b2c o2o全渠道云平台
- HLOCAL初探
- list.h内核链表是如何定义和操作的呢
- Java基础之IO流知识点总结二
- 双击uppaal图标打不开
- Java常用日志框架介绍
- 事件
- org.apache.storm.zookeeper.KeeperException.SystemErrorException