[负数在内存中的存储] 0x80000000 = -2147483648
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的更多相关文章
- C语言中浮点数在内存中的存储方式
关于多字节数据类型在内存中的存储问题 //////////////////////////////////////////////////////////////// int ,short 各自是4. ...
- Float在内存中的存储方式及IEC61131处理
Float在内存中的存储方式及IEC61131处理 1,fp32(32bits float)类型数据在存储器中占用4Bytes存储,且遵循IEEE-754标准: 一个浮点数分三部分组成: 符号位s(1 ...
- C语言之数据在内存中的存储
C语言之数据在内存中的存储 在我们学习此之前,我们先来回忆一下C语言中都有哪些数据类型呢? 首先我们来看看C语言中的基本的内置类型: char //字符数据类型 short //短整型 int //整 ...
- 【C语言】整型在内存中的存储
整型在内存中的存储 1.整型的归类 char short int long 以上都分为有符号(signed)与无符号(unsigned)的类型 2.原码.反码和补码 2.1 定义 计算机在表示一个数字 ...
- 【C语言】浮点型在内存中的存储
1. 摘要 在了解到C语言中整型是以二进制补码形式存储在内存中后,我们不禁很好奇:那么浮点型的数据是以什么形式存储在内存中的呢? 实际上,早在1985年,电气电子工程师学会就制定了IEEE 754标准 ...
- 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
一.-100.01 的double 在内存中怎么存储的 double双精度数据类型存储格式IEEE 双精度格式为8字节64位,由三个字段组成:52 位小数 f : 11 位偏置指数 e :以及 1 位 ...
- float 在内存中如何存储的
float类型数字在计算机中用4个字节存储.遵循IEEE-754格式标准: 一个浮点数有2部分组成:底数m和指数e 底数部分 使用二进制数来表示此浮点数的实际值指数部分 占用8bit的二进制数, ...
- <转载>浅谈C/C++的浮点数在内存中的存储方式
C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100.则在Intel CPU架构的系统中 ...
- String在内存中如何存储(Java)
JDK1.8中JVM把String常量池移入了堆中,同时取消了“永久代”,改用元空间代替(Metaspace)java中对String对象特殊对待,所以在heap区域分成了两块,一块是字符串常量池(S ...
随机推荐
- 坦克大战--Java类型 ---- (3)实现socket通信
一.实现思路 使用socket通信的一些方法来实现socket通信,客户端和服务端两边需要约定好通信的接口Port(尽量选高的),客户端需要服务端的IP地址,以实现数据交流. 同时,客户端和服务端需要 ...
- QThread::wait(),一直以来我以为它阻塞的是QThread对象,可是我现在明白,原来阻塞的是这个对象所在的线程(通常是主线程)——所有事情源于 QThread 的事件循环——如果使用继承QThread这一方法,QThread::quit()没有效果,因为这个线程根本就不需要事件循环
近日,使用QThread,一些问题百思不得其解,看过大牛的文章,恍然大悟啊. 原文 http://hi.baidu.com/dbzhang800/item/c14c97dd15318d17e1f46f ...
- Java排序--排序算法(内排序)
常用内排序算法 我们通常所说的排序算法往往指的是内部排序算法,即需要排序的数据在计算机内存中完成整个排序的过程,当数据率超大或排序较为繁琐时常借助于计算机的硬盘对大数据进行排序工作,称之为外部排序算法 ...
- java实现spark常用算子之filter
import org.apache.spark.SparkConf;import org.apache.spark.api.java.JavaRDD;import org.apache.spark.a ...
- debezium关于cdc的使用(下)
博文原址:debezium关于cdc的使用(下) 简介 debezium在debezium关于cdc的使用(上)中有做介绍.具体可以跳到上文查看.本篇主要讲述使用kafka connector方式来同 ...
- jQuery操作选中select下拉框的值
js和jQuery联合操作dom真的很好用,如果不是专业前端人员的话,我觉得吧前端语言只要熟练掌握js和jQuery就可以了. 获取select下拉框的几种情况如下: 1.获取第一个option的值 ...
- Webpack loaderUtils.parseQuery()
https://blog.256pages.com/webpack-loaderutils-parsequery/
- day3-3种实现小图标与文字水平对齐的方式
效果图: 1.使用小图标作为背景图实现 html: <div class="test"> <ul> <li class="method1&q ...
- CVE-2018-0802漏洞利用
看了一天apt报告,主流利用Office鱼叉攻击的漏洞,还是这Microsoft Office CVE-2017-8570,CVE-2017-11882和CVE-2018-0802 三个,而且都知道o ...
- SpringMVC基础03——常用注解之@RequestMapping
1.用法 SpringMVC使用@RequestMapping注解,为控制器指定可以处理哪些URL请求,并且可以指定处理请求的类型(POST/GET),如果@RequestMapping没有指定请求的 ...