https://blog.csdn.net/youyou362/article/details/72667951/

1. 十进制负数以其补码存储在内存上

例子:-8 在内存中表示为:1111 1111 1111 1111 1111 1111 1111 1000

验证:求-8在内存上以二进制形式1的个数

 int NumberOf1(int n)
{
int count = ;
unsigned int value = ;
while(value != )
{
if(value & n)
{
count++;
}
value = value << ;
}
return count;
} cout << NumberOf1(-) << endl; //

-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位,所以

 int test_0x80000000 = 0x80000000;
cout << test_0x80000000 << endl; // -2147483648
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$

 int test_0xFFFFFFFF = 0xFFFFFFFF;
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$

以上验证了十进制补码和十六进制原码表示的数值均符合 符号位 + 序号位 的原则。

[负数在内存中的存储] 0x80000000 = -2147483648的更多相关文章

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

    关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4. ...

  2. Float在内存中的存储方式及IEC61131处理

    Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...

  3. C语言之数据在内存中的存储

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

  4. 【C语言】整型在内存中的存储

    整型在内存中的存储 1.整型的归类 char short int long 以上都分为有符号(signed)与无符号(unsigned)的类型 2.原码.反码和补码 2.1 定义 计算机在表示一个数字 ...

  5. 【C语言】浮点型在内存中的存储

    1. 摘要 在了解到C语言中整型是以二进制补码形式存储在内存中后,我们不禁很好奇:那么浮点型的数据是以什么形式存储在内存中的呢? 实际上,早在1985年,电气电子工程师学会就制定了IEEE 754标准 ...

  6. 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK

    一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...

  7. float 在内存中如何存储的

    float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准:    一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进制数, ...

  8. <转载>浅谈C/C++的浮点数在内存中的存储方式

    C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...

  9. String在内存中如何存储(Java)

    JDK1.8中JVM把String常量池移入了堆中,同时取消了“永久代”,改用元空间代替(Metaspace)java中对String对象特殊对待,所以在heap区域分成了两块,一块是字符串常量池(S ...

随机推荐

  1. C/C++的几个输入流

    C: 1.scanf( ) 存在于<stdio.h>(C++为<cstdio>)中,根据stdin读取数据并根据参数格式进行赋值,以第一个非空格字符(空格字符如:空格,制符表, ...

  2. myeclipse中jpa的安装以及jpa reverse engining

    myeclipse中jpa的安装以及jpa reverse engining 安装 右击 Configure Facets, Install JPA jpa reverse engining 1.db ...

  3. Luogu P3810 【模板】三维偏序(陌上花开)(CDQ分治)

    题目 以三维偏序为例来讲一下CDQ分治. CDQ的本质就是把一个序列分成两段,计算左边对右边的贡献,然后分治. 不过一般都是先分治到底再从下往上算,这样可以先归并再算. 比如这道题,我们先按第一维排序 ...

  4. P3376 网络流-最大流模板题(Dinic+当前弧优化)

    (点击此处查看原题) Dinic算法 Dinic算法相对于EK算法,主要区别在于Dinic算法对图实现了分层,使得我们可以用一次bfs,一次dfs使得多条增广路得到增广 普通的Dinic算法已经可以处 ...

  5. jquery的offset().top与javascript的offsetTop区别?

    offset().top是jquery的方法,需引入jquery,它获取你绑定元素上边框相对于html上边界的偏移量 offsetTop是原生js的方法,它获取你绑定元素上边框相对于离自己最近且pos ...

  6. spark算子篇-aggregate 系列

    aggregate aggregate 是比较常用的 行动 操作,不是很好懂,这里做个解释. aggregate(zeroValue, seqOp, combOp) zeroValue 是一个初始值, ...

  7. JavaScript里面9种数组遍历!

    ​大家好,我在这里总结分享了JavaScript中的闹腾的数组循环家族. 1.大家最常用的for循环,我就不解释了: for(let i = 0; i < 5 ; i++){ console.l ...

  8. 正确的安装和使用nvm(mac)<转>

    前言 目前主流的node版本管理工具有两种,nvm和n.两者差异挺大的,具体分析可以参考一下淘宝FED团队的一篇文章: 管理 node 版本,选择 nvm 还是 n? 总的来说,nvm有点类似于 Py ...

  9. redis性能指标

    1.当内存使用达到设置的最大阀值时,需要选择一种key的回收策略,可在Redis.conf配置文件中修改“maxmemory-policy”属性值. 若是Redis数据集中的key都设置了过期时间,那 ...

  10. Linux系统下C语言获取Time

    获取时间的函数有很多,具体包括如下: time()/gettimeofday()等等,下面是获取具体到usecond的时间程序: #include <iostream> #include ...