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. 负数在内存中的存储形式——补码

    1.数在内存中都已补码形式存在 https://blog.csdn.net/u012511672/article/details/51724272 对于一个负数-x,它的二进制表示(补码)求法如下: ...

  2. 补码还原为原码c语言,C语言知识汇总 | 12-整数(有、无符号数)在内存中的存储——原码、反码与补码...

    加法和减法是计算机中最基本的运算,计算机时时刻刻都离不开它们,所以它们由硬件直接支持.为了提高加减法的运算效率,硬件电路要设计得尽量简单. 对于有符号数,内存要区分符号位和数值位,对于人脑来说,很容易 ...

  3. C语言负整数在内存中的存储

    C语言负整数在内存中的存储 内存的存储 1)在电脑的内存中分为1byte = 8bit 每个bit中可以储存一个低电压或者是高电压 也就是0和1 2)正如下面所示1字节大小 3)控制保存3 C 变量占 ...

  4. 数据存储---整形数据在内存中的存储

    我们每一次写代码的时候,都会创建变量.那么所创建的整形变量是如何在内存中存储的呢? 目录 1.数据类型介绍. 2.整形数据在内存中的存储形式. 3.大小端字节序的介绍. 1.数据类型介绍 本文重点介绍 ...

  5. java set第n位_Java学习路线:float在内存中的存储

    Java学习路线:float在内存中的存储,最近在讲Java基础,讲到数据类型的转换,提到整数类型长字节类型数据放到短字节类型数据中时,由于字节数不够,会截断数据,所以需要程序员手动强制类型转换,例如 ...

  6. C语言程序设计 | 整型、浮点型在内存中的存储方式

    整型在内存中的存储 一个变量的创建要在内存中开辟空间,空间的大小是根据不同的类型决定的. 那数据在数据在所开辟的空间中是如何存储的呢? 首先我们要了解三个概念: 原码 反码 补码 计算机中的有符号数有 ...

  7. C语言浮点数据在内存中的存储方式

    float在内存中的存储遵循IEEE 754标准.在C/C++中,float类型占4个字节即32位 , 这32位分成了3部分: 符号位最为简单,如果你存储的是正数那么符号数就是0.如果是负数,则为1. ...

  8. C语言的数据类型大全,整型数据在内存中的存储方式

    一.数据类型 通过长时间的学习C语言以及代码的编写,我掌握了很多很多的数据类型,下面就给大家罗列一下. 1.内置数据类型 char        //字符数据类型--                  ...

  9. c语言字母是怎么存储,C语言之数据在内存中的存储

    C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...

最新文章

  1. JavaScript多浏览器兼容问题
  2. apache tomcat部署web应用的三种实现方式
  3. Crawler:爬虫之基于https+parse库实现爬取国内某知名招聘网上海、北京关于区块链职位的求职信息
  4. Mathematica函数大全
  5. java 只有日期的类_【你不知道的事系列】Java中处理日期的类
  6. 微信联合万达广场上线无感支付 2秒出停车场
  7. gulp + webpack + sass 学习
  8. 深入理解Tomcat系列之一:系统架构(转)
  9. 关于《啊哈!算法》相关资源
  10. JPush极光推送的原理
  11. MongoDB——客户端Robo 3T v1.4.3 安装
  12. 专利文件公开显示谷歌或正开发实时翻译新型虚拟键盘
  13. 计算机网络和HTTP协议:HTTP篇
  14. Android实现自适应正方形GridView(陌陌引导页面效果)
  15. Apache Dubbo基本使用
  16. MySQL学习笔记(5)
  17. IT运维工单高效协同,助力打造一站式运维方案
  18. 「Activiti精品 悟纤出品」流程模型搭建-小试牛刀 - 第324篇
  19. 12306网站、抢票插件以及偶写的自动订票小程序
  20. 蓝桥杯算法训练 无聊的逗-详细注释版

热门文章

  1. Telnet开启与关闭
  2. install vnc server on debian
  3. Project_2007关键
  4. Android检测手机系统版本号、手机品牌工具类
  5. android装备选择,原神迪卢克武器怎么选_原神迪卢克武器选择推荐
  6. 【低危漏洞修复】Tomcat服务器版本号泄露-低危漏洞修复
  7. 2019年香港计算机考研,【图片】2019年香港前8所大学研究生申请最新情况!【考研吧】_百度贴吧...
  8. 怎样判断网址是否被微信封 微信域名检测接口的实现
  9. windows系统下配置host的解决办法
  10. 灰色系装修风格怎么做才能显高级,温馨?