整数和浮点数在内存中存储及题目

一、整数在内存中存储


整数的2进制表⽰⽅法有三种,即原码、反码和补码。三种表⽰⽅法均有符号位和数值位两部分,符号位都是⽤0表⽰“正”,⽤1表⽰“负”,⽽数值位最⾼位的⼀位是被当做符号位,剩余的都是数值位

正整数的原、反、补码都相同。
负整数的三种表⽰⽅法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
 

对于整形来说:数据存放内存中其实存放的是补码。


原因:

二、整数在内存中存储的一些题目

(1)题目1

int main()
{char a = -1;signed char b = -1;unsigned char c = -1;printf("a=%d,b=%d,c=%d", a, b, c);return 0;
}

结果:

解释:

signed char 和 char 是一样的,都是有符号类型
 unsiged char 是无符号类型

 //-1 的原码是 10000000000000000000000000000001
//-1 的反码是 11111111111111111111111111111110
//-1的补码是  11111111111111111111111111111111
//-1的补码存放在char中会发生截断
//截断成 11111111 (最高位的1是符号位.被认为是负数)
//当用%d打印时,要发生整形提升,因为char是有符号的,所以提升时,就补最高位的1
//提升成了 11111111111111111111111111111111
//而%d是将数据当做有符号类型打印的(打印的值就是原码所对应的值),
// 看到补码的最高位是1,认为是负数,所以就又推回去了,结果是-1
 //-1 的原码是 10000000000000000000000000000001
//-1 的反码是 11111111111111111111111111111110
//-1的补码是  11111111111111111111111111111111
//-1的补码存放在char中会发生截断
//截断成 11111111 
//当用%d打印时,要发生整形提升,但是因为 unsigned char是无符号的,所以提升时,
// (最高位的1不是符号位.也是数值位了)补得就是0了
//提升成了    00000000000000000000000011111111 
//而%d是将数据当做有符号类型打印的(打印的值就是原码所对应的值),
//看到补码的最高位是0,认为是正数,正数原,反,补码相同,
// 所以结果就是 二进制的 11111111 对应的十进制数 255

(2)题目2

int main()
{char a = -128;printf("%u\n", a);return 0;
}

结果:

解释

//-128的原码是10000000000000000000000010000000
//-128的补码是11111111111111111111111101111111
//-128的反码是11111111111111111111111110000000
// 存在char截断成了    10000000
//%u是打印无符号数(不管是不是无符号数,都视为无符号数)
//因为是char 打印时提升为 11111111111111111111111110000000
//而%u视为无符号数,这个补码被视为一个正数的补码
// 结果就是二进制数 11111111111111111111111110000000
//所对应的十进制数4294967168

(3)题目3

解释:

 //128的原码是00000000000000000000000010000000//128的补码是01111111111111111111111101111111//128的反码是01111111111111111111111110000000// 存在char截断成了    10000000//%u是打印无符号数(不管是不是无符号数,都视为无符号数)//因为是char 打印时提升为 11111111111111111111111110000000//而%u视为无符号数,这个补码被视为一个正数的补码// 结果就是二进制数 11111111111111111111111110000000//所对应的十进制数4294967168

(4)题目4

解释:

 a是字符型数组,strlen找的是第一次出现'\0'(即值为0)的位置。
 考虑到a[i]其实是字符型,如果要为0,则需要 - 1 - i的低八位要是全0,
 也就是问题简化成了“寻找当 - 1 - i的结果第一次出现低八位全部为0的情况时,
 i的值”(因为字符数组下标为i时第一次出现了尾零,则字符串长度就是i)。
 只看低八位的话,此时 - 1相当于255,所以i == 255的时候,
  - 1 - i(255 - 255)的低八位全部都是0,也就是当i为255的时候,
  a[i]第一次为0,所以a[i]的长度就是255了
 

(5)题目5

 int main(){unsigned char i = 0;for (i = 0; i <= 255; i++){printf("hello world\n");}return 0;
}

解释:

因为是,unsigned char  当i增加到255时,i又变成了0,所以一直循环

三、浮点数在内存中存储

常⻅的浮点数:3.14159、1E10等,浮点数家族包括: float、double、long double 类型。
浮点数表⽰的范围: float.h 中定义
 

1 存储规则

IEEE754规定:
对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M
对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M


2.浮点数存的过程

IEEE754有效数字M和指数E,还有⼀些特别规定。
前⾯说过, 1≤M<2 ,也就是说,M可以写成 1.xxxxxx 的形式,其中 xxxxxx 表⽰⼩数部分。
IEEE754规定,在计算机内部保存M时,默认这个数的第⼀位总是1,因此可以被舍去,只保存后⾯的xxxxxx部分。⽐如保存1.01的时候,只保存01,等到读取的时候,再把第⼀位的1加上去。这样做的⽬的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第⼀位的1舍去以后,等于可以保存24位有效数字。
 

⾄于指数E,情况就⽐较复杂
⾸先,E为⼀个⽆符号整数(unsignedint)


这意味着,如果E为8位,它的取值范围为0~255;如果E为11位,它的取值范围为0~2047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE754规定,存⼊内存时E的真实值必须再加上⼀个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。⽐如,2^10的E是10,所以保存成32位浮点数时,必须保存成10+127=137,即10001001。
 

3.浮点数取的过程

E不全为0或不全为1
这时,浮点数就采⽤下⾯的规则表⽰,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第⼀位的1。
⽐如:0.5的⼆进制形式为0.1,由于规定正数部分必须为1,即将⼩数点右移1位,则为1.0*2^(-1),其阶码为-1+127(中间值)=126,表⽰为01111110,⽽尾数1.0去掉整数部分为0,补⻬0到23位00000000000000000000000,则其⼆进制表⽰形式为:
 

E全为0

这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还原为0.xxxxxx的⼩数。这样做是为了表⽰±0,以及接近于0的很⼩的数字,则其⼆进制表⽰形式为:

 E全为1

这时,如果有效数字M全为0,表⽰±⽆穷⼤(正负取决于符号位s),则其⼆进制表⽰形式为:


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/751543.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UglifyJS 压缩工具

要使用 UglifyJS 进行 JavaScript 代码的压缩和混淆&#xff0c;你可以按照以下步骤进行&#xff1a; 安装 Node.js&#xff1a; 首先确保你的计算机上安装了 Node.js。如果没有安装&#xff0c;你可以从 Node.js 官方网站 下载并安装。 安装 UglifyJS&#xff1a; 在安装 Nod…

2024腾讯云免费服务器2核8G配置申请流程,亲测有效

腾讯云免费服务器申请入口 https://curl.qcloud.com/FJhqoVDP 免费服务器可选轻量应用服务器和云服务器CVM&#xff0c;轻量配置可选2核2G3M、2核8G7M和4核8G12M&#xff0c;CVM云服务器可选2核2G3M和2核4G3M配置&#xff0c;腾讯云服务器网txyfwq.com分享2024年最新腾讯云免费…

C++for语句(2)

11.乘方计算 给出一个整数a和一个正整数n&#xff08;-1000000<a<1000000,1<n<100000&#xff09;&#xff0c;求乘方&#xff0c;即乘方的结果。最终结果的绝对值不超过1000000。 输入 一行&#xff0c;包含两个整数a和n&#xff08;-1000000<a<1000000,1…

第四十四周:文献阅读 + SG滤波+基于LSTM的编码器-解码器

目录 摘要 Abstract 文献阅读&#xff1a;基于集成深度神经网络的大规模水质预测 现有问题 提出方法 方法论 Savitsky-Golay过滤器 SE-LSTM&#xff08;基于LSTM的编码器-解码器神经网络&#xff09; 研究实验 数据集 实验设置 评估指标 基准模型 实验结果 发展…

搜维尔科技:使用SenseGlove Nova手套操纵其“CAVE”投影室中的虚拟对象

创造了一种基于 PC 的创新型多边沉浸式环境&#xff0c;让参与者完全被虚拟图像和声音包围。 需要解决的挑战&#xff1a; 传统的 VR 系统往往缺乏真实的触摸反馈&#xff0c;限制了用户的沉浸感。AVR Japan 旨在通过将触觉技术融入到他们的 CAVE 系统中来应对这一挑战&#x…

操作系统(AndroidIOS)图像绘图的基本原理

屏幕显示图像的过程 我们知道&#xff0c;屏幕是由一个个物理显示单元组成&#xff0c;每一个单元我们可以称之为一个物理像素点&#xff0c;而每一个像素点可以发出多种颜色。 而图像&#xff0c;就是在不同的物理像素点上显示不同的颜色构成的。 像素点的颜色 像素的颜色是…

HTML静态网页成品作业(HTML+CSS)——游戏战地介绍设计制作(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

3.4 bp,si,di寄存器,寻址方式,寄存器总结

汇编语言 1. [bxidata] 我们可以用[bx]来指明一个内存单元我们也可以用[bxidata]来表示一个内存单元&#xff0c;它的偏移地址为bx中的数值加上idata mount c d:masm c: debug r d 2000:1000 e 2000:1000 12 34 56 78 a mov ax,2000 mov ds,ax mov bx,1000 mov ax,[bx] mov c…

C++之deque与vector、list对比分析

一.deque讲解 对于vector和list&#xff0c;前一个是顺序表&#xff0c;后一个是带头双向循环链表&#xff0c;前面我们已经实现过&#xff0c;这里就不再讲解了&#xff0c;直接上deque了。 deque&#xff1a;双端队列 常见接口大家可以查看下面链接&#xff1a; deque - …

Redis - String 字符串

前言 下表中包含本博客提到的所有命令 字符串类型是 Redis 最基础的数据类型&#xff0c;关于字符串需要特别注意&#xff1a; 1&#xff09;⾸先 Redis 中所有的键&#xff08;key&#xff09;的类型都是字符串类型&#xff0c;⽽且其他⼏种数据结构也都是在字符串类似基础上…

Figure 01掀起了具身智能的崭新篇章

在人工智能的发展历程中&#xff0c;OpenAI始终扮演着创新的先锋角色。最近&#xff0c;他们与Figure公司的合作成果尤为引人注目&#xff0c;这一合作将多模态大模型技术成功应用于Figure 01机器人的开发中&#xff0c;为人类与机器的互动开辟了全新的时代。该机器人不仅能够与…

Matlab|【免费】基于半不变量的概率潮流计算

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序主要内容是基于半不变量法的概率潮流&#xff0c;包含蒙特卡洛模拟法、半不变量法&#xff0b;Gram-Charlier级数展开以及半不变量法Cornish-Fisher级数展开三种方法以及效果对比&#xff0c;模型考虑了…

Python 查找并高亮PDF中的指定文本

在处理大量PDF文档时&#xff0c;有时我们需要快速找到特定的文本信息。本文将提供以下三个Python示例来帮助你在PDF文件中快速查找并高亮指定的文本。 查找并高亮PDF中所有的指定文本查找并高亮PDF某个区域内的指定文本使用正则表达式搜索指定文本并高亮 本文将用到国产第三方…

cesium.js加载模型后,重新设置旋转角度属性值

// 加载模型var position Cesium.Cartesian3.fromDegrees(longitude, latitude, height);// 计算矩阵var rollAngleDegrees 15; // 设置翻滚角度var rollAngleRadians Cesium.Math.toRadians(rollAngleDegrees); // 将角度转换为弧度var orientation Cesium.Transforms.eas…

安装Pytorch——CPU版本

安装Pytorch——CPU版本 1. 打开pytorch官网2. 选择pip安装pytorch-cpu3.复制安装命令4. 在cmd命令窗口&#xff0c;进入你的虚拟环境4.1 创建虚拟环境4.2 进行安装 5. 安装成功6. 进行测试——如下面步骤&#xff0c;如图6.1 输入 python6.2 输入 import torch6.2 输入 print …

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Web)中篇

onBeforeUnload onBeforeUnload(callback: (event?: { url: string; message: string; result: JsResult }) > boolean) 刷新或关闭场景下&#xff0c;在即将离开当前页面时触发此回调。刷新或关闭当前页面应先通过点击等方式获取焦点&#xff0c;才会触发此回调。 参数…

微信小程序-微信支付

微信支付介绍 梳理一下流程&#xff1a; 1、用户点击下单&#xff0c;小程序向商户系统&#xff08;我们的服务器&#xff09;发起请求&#xff0c;服务器生成一个唯一订单号给小程序。 2、小程序向服务器发起微信支付请求&#xff0c;服务器调用微信下单接口&#xff0c;微信…

【教学类-34-10】20240313 春天拼图(Midjounery生成线描图,4*4格拼图块)(AI对话大师)

作品展示&#xff1a; 背景需求&#xff1a; 利用华文彩云空心字&#xff08;粗胖字体。凑满9个拼图&#xff09;制作了3*3的拼图块 【教学类-34-09】20240310华文彩云学号拼图&#xff08;3*3格子浅灰底图 深灰拼图块&#xff09;&#xff08;AI对话大师&#xff09;-CSDN博…

Android14之报错:error:add its name to the whitelist(一百九十四)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

juc(3)

进程 程序由指令和数据组成,到哪有些指令需要执行,有些要读写,句必须将指令加载到cpu,数据加载到内存,再指令运行过程中还要用到磁盘,网络等设备.进程就是用来加载指令.管理内存,管理io的 当一个程序被运行,从磁盘加载这个程序的代码到内存,这时就开启了一个进程 进程可以视…