[负数在内存中的存储] 0x80000000 = -2147483648
https://blog.csdn.net/youyou362/article/details/72667951/
1. 十进制负数以其补码存储在内存上
例子:-8 在内存中表示为:1111 1111 1111 1111 1111 1111 1111 1000
验证:求-8在内存上以二进制形式1的个数
1 int NumberOf1(int n) 2 { 3 int count = 0; 4 unsigned int value = 1; 5 while(value != 0) 6 { 7 if(value & n) 8 { 9 count++; 10 } 11 value = value << 1; 12 } 13 return count; 14 } 15 16 cout << NumberOf1(-8) << endl; //29
-8在内存上以二进制形式1的个数 = 29
解析:
-8 的原码: 1000 0000 0000 0000 0000 0000 0000 1000
-8 的反码: 1111 1111 1111 1111 1111 1111 1111 0111 (符号位不变,其余各位取反)
-8 的补码: 1111 1111 1111 1111 1111 1111 1111 1000 (补码 = 反码 + 1)
其中1的数量正好为29。
2. 十六进制负数以其原码存储在内存上
以上例:-8 的十六进制,在内存中表示 只有2 个1.
3. 二者都符合 符号位 + 序号位(不是值位!)的原则
1)对于16进制的 0x80000000:
原码:1000 0000 0000 0000 0000 0000 0000 0000
最高位:符号位 (-)
后31位:序号位,不是值位。000 0000 0000 0000 0000 0000 0000 0000, 表示序号0, 表示所有31位可表示的数中,从小到大的第0位。
int的最小值 $-2^{31}$, 0x80000000为这些数从小到大的第0位,所以
1 int test_0x80000000 = 0x80000000; 2 cout << test_0x80000000 << endl; // -2147483648 3 cout << INT_MIN << endl; // -2147483648
2) 对于16进制的 0xFFFFFFFF:
原码:1111 1111 1111 1111 1111 1111 1111 1111
最高位:符号位 (-)
后31位:序号位。111 1111 1111 1111 1111 1111 1111 1111 = $2^{31} - 1$
所以 0xFFFFFFFF为负数从小到达的第2^31 - 1位,即 $-2^{31} + (2^{31} - 1) = -1$
1 int test_0xFFFFFFFF = 0xFFFFFFFF; 2 cout << test_0xFFFFFFFF << endl; // -1
3) 对于10进制的 -8:
-8 的补码:1111 1111 1111 1111 1111 1111 1111 1000
最高位:符号位 (-)
后31位:111 1111 1111 1111 1111 1111 1111 1000 = $2^{31} - 8$
所以补码表示的值为:$-2^{31} + (2^{31} - 8) = -8$
以上验证了十进制补码和十六进制原码表示的数值均符合 符号位 + 序号位 的原则。
转载于:https://www.cnblogs.com/shiyublog/p/10910370.html
[负数在内存中的存储] 0x80000000 = -2147483648相关推荐
- 负数在内存中的存储形式——补码
1.数在内存中都已补码形式存在 https://blog.csdn.net/u012511672/article/details/51724272 对于一个负数-x,它的二进制表示(补码)求法如下: ...
- 补码还原为原码c语言,C语言知识汇总 | 12-整数(有、无符号数)在内存中的存储——原码、反码与补码...
加法和减法是计算机中最基本的运算,计算机时时刻刻都离不开它们,所以它们由硬件直接支持.为了提高加减法的运算效率,硬件电路要设计得尽量简单. 对于有符号数,内存要区分符号位和数值位,对于人脑来说,很容易 ...
- C语言负整数在内存中的存储
C语言负整数在内存中的存储 内存的存储 1)在电脑的内存中分为1byte = 8bit 每个bit中可以储存一个低电压或者是高电压 也就是0和1 2)正如下面所示1字节大小 3)控制保存3 C 变量占 ...
- 数据存储---整形数据在内存中的存储
我们每一次写代码的时候,都会创建变量.那么所创建的整形变量是如何在内存中存储的呢? 目录 1.数据类型介绍. 2.整形数据在内存中的存储形式. 3.大小端字节序的介绍. 1.数据类型介绍 本文重点介绍 ...
- java set第n位_Java学习路线:float在内存中的存储
Java学习路线:float在内存中的存储,最近在讲Java基础,讲到数据类型的转换,提到整数类型长字节类型数据放到短字节类型数据中时,由于字节数不够,会截断数据,所以需要程序员手动强制类型转换,例如 ...
- C语言程序设计 | 整型、浮点型在内存中的存储方式
整型在内存中的存储 一个变量的创建要在内存中开辟空间,空间的大小是根据不同的类型决定的. 那数据在数据在所开辟的空间中是如何存储的呢? 首先我们要了解三个概念: 原码 反码 补码 计算机中的有符号数有 ...
- C语言浮点数据在内存中的存储方式
float在内存中的存储遵循IEEE 754标准.在C/C++中,float类型占4个字节即32位 , 这32位分成了3部分: 符号位最为简单,如果你存储的是正数那么符号数就是0.如果是负数,则为1. ...
- C语言的数据类型大全,整型数据在内存中的存储方式
一.数据类型 通过长时间的学习C语言以及代码的编写,我掌握了很多很多的数据类型,下面就给大家罗列一下. 1.内置数据类型 char //字符数据类型-- ...
- c语言字母是怎么存储,C语言之数据在内存中的存储
C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...
最新文章
- JavaScript多浏览器兼容问题
- apache tomcat部署web应用的三种实现方式
- Crawler:爬虫之基于https+parse库实现爬取国内某知名招聘网上海、北京关于区块链职位的求职信息
- Mathematica函数大全
- java 只有日期的类_【你不知道的事系列】Java中处理日期的类
- 微信联合万达广场上线无感支付 2秒出停车场
- gulp + webpack + sass 学习
- 深入理解Tomcat系列之一:系统架构(转)
- 关于《啊哈!算法》相关资源
- JPush极光推送的原理
- MongoDB——客户端Robo 3T v1.4.3 安装
- 专利文件公开显示谷歌或正开发实时翻译新型虚拟键盘
- 计算机网络和HTTP协议:HTTP篇
- Android实现自适应正方形GridView(陌陌引导页面效果)
- Apache Dubbo基本使用
- MySQL学习笔记(5)
- IT运维工单高效协同,助力打造一站式运维方案
- 「Activiti精品 悟纤出品」流程模型搭建-小试牛刀 - 第324篇
- 12306网站、抢票插件以及偶写的自动订票小程序
- 蓝桥杯算法训练 无聊的逗-详细注释版
热门文章
- Telnet开启与关闭
- install vnc server on debian
- Project_2007关键
- Android检测手机系统版本号、手机品牌工具类
- android装备选择,原神迪卢克武器怎么选_原神迪卢克武器选择推荐
- 【低危漏洞修复】Tomcat服务器版本号泄露-低危漏洞修复
- 2019年香港计算机考研,【图片】2019年香港前8所大学研究生申请最新情况!【考研吧】_百度贴吧...
- 怎样判断网址是否被微信封 微信域名检测接口的实现
- windows系统下配置host的解决办法
- 灰色系装修风格怎么做才能显高级,温馨?