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

一、整数在内存中存储


整数的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),则其⼆进制表⽰形式为:


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用ChatGPT高效完成简历制作[中篇]-有爱AI实战教程(五)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 导读&#xff1a;在使用 ChatGPT 时&#xff0c;当你给的指令越精确&#xff0c;它的回答会越到位&#xff0c;举例来说&#xff0c;假如你要请它帮忙写文案&#xff0c;如果没…

【JS进阶】第一天

参考视频——黑马程序员 JavaScript 进阶 - 第 1 天 学习作用域、变量提升、闭包等语言特征&#xff0c;加深对 JavaScript 的理解&#xff0c;掌握变量赋值、函数声明的简洁语法&#xff0c;降低代码的冗余度。 理解作用域对程序执行的影响能够分析程序执行的作用域范围理解闭…

后端程序员入门react笔记(八)-redux的使用和项目搭建

一个更好用的文档 添加链接描述 箭头函数的简化 //简化前 function countIncreAction(data) {return {type:"INCREMENT",data} } //简化后 const countIncreAction data>({type:"INCREMENT",data })react UI组件库相关资料 组件库连接和推荐 antd组…

electron 学习

const { app, BrowserWindow } require(electron); const path require(path); function createWindow () {let mainWin new BrowserWindow({x: 100,y: 100,show:false, // 默认不显示窗体width: 800,height: 800,maxHeight: 1000,maxWidth: 1000,minHeight: 400,minWidth: …

Linux学习(4)——使用编辑器

1.gedit编辑器 简单易懂&#xff0c;依赖图形界面。可以使用ctrlc ctrlv等快捷键&#xff0c;ctrls进行保存&#xff0c;与windows系统中相类似。 2.vi/vim编辑器 vi/vim可以直接通过控制台的终端完成文本的编辑&#xff0c;不依赖图形界面&#xff0c;使用范围更广。它的编辑…

安装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 …

【Web开发】CSS教学(超详细,满满的干货)

&#x1f493; 博客主页&#xff1a;从零开始的-CodeNinja之路 ⏩ 收录文章&#xff1a;【Web开发】CSS教学(超详细,满满的干货) &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 CSS一. 什么是CSS?1.1 基本语法规范1.2 引入方式1.3 规范 二. CSS选…

Spring Web MVC入门(3)

学习Spring MVC 请求 传递JSON数据 JSON概念 JSON: JavaScript Object Natation JSON是一种轻量的数据交互格式, 采用完全独立于编程语言的文本格式来存储和标识数据. 简单来说, JSON是一种数据格式, 有自己的格式和语法, 使用文本来表示对象或数组的信息, 因此JSON的本质…

下载、安装Maven

官网搜索Maven 进入官网 点击下载

蓝桥杯每日一题 走迷宫bfs 超超详细解释!!!

昨天学习了bfs的基本概念&#xff0c;今天来做一道经典习题练练手吧&#xff01; bfs常用的两类题型 1.从A出发是否存在到达B的路径(dfs也可) 2.从A出发到B的最短路径&#xff08;数小:<20才能用dfs&#xff09; 遗留的那个问题的答案- 题目&#xff1a;走迷宫 答案&…

在根据卷积核大小计算padding时要遵循什么原则

在计算卷积操作中的 padding 大小时&#xff0c;通常有以下原则&#xff1a; 保持输入输出尺寸相同&#xff1a;如果希望卷积操作前后输入和输出的尺寸保持不变&#xff0c;可以使用以下公式计算 padding 大小&#xff1a; 其中&#xff0c;filter size 是卷积核的大小。这个…

腾讯云免费服务器申请入口_2核2G、2核8G和4核8G配置

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

【白嫖】100%中奖阿里云实物键盘、游戏机、苹果15

1.扫描下方二维码或者直接点击链接跳转 [阿里云-通义灵码] (https://developer.aliyun.com/topic/lingma/activities/202403?taskCode14508&recordIdb0e97482e51e08068012bbb1eb743a15#/?utm_contentm_fission_1%20%20%E3%80%8C%E9%80%9A%E4%B9%89%E7%81%B5%E7%A0%81%20…

146 Linux 网络编程2 ,Socket编程,如何创建Linux 服务器 和linux 客户端

IPport 就是一个程序在网络上的身份证号码。 这意味着我们需要如果写一个服务器&#xff0c;至少需要将这台服务器的ip 和 端口号写到程序里面。 实际上更细化的说&#xff1a;应该是将这三都写进程序里面 &#xff1a; IP类型&#xff08;IPV4或者IPV6&#xff09;&#xff…

5分钟教你激活喀秋莎Camtasia2023中文破解Crack下载附安装教程

Camtasia2023又称喀秋莎2023&#xff0c;集屏幕录制和视频剪辑功能于一体的软件&#xff0c;提供屏幕录制、区域录制、摄像头录制等多种录制方式&#xff0c;Camtasia2023版本带来了新的动态背景库、霓虹光标图像、录制语音旁白等多种新功能&#xff0c;适用于游戏录制、课程录…

Jupyter Notebook出错提示An error occurred while retrieving package information解决办法

出错日志信息&#xff1a; To access the notebook, open this file in a browser:file:///C:/Users/colda/AppData/Roaming/jupyter/runtime/nbserver-14564-open.htmlOr copy and paste one of these URLs:http://localhost:8888/?token3c0113e5da07c0b8b8c9de74ffb453c5047…

Python下有关CV的一些算法和函数

目录&#xff1a; 1. HoughCircles二级目录三级目录 1. HoughCircles 霍夫圆检测 二级目录 三级目录

【Docker】一文趣谈Docker

&#x1f3e1;浩泽学编程&#xff1a;个人主页 &#x1f525; 推荐专栏&#xff1a;《深入浅出SpringBoot》《java对AI的调用开发》 《RabbitMQ》《Spring》《SpringMVC》《项目实战》 &#x1f6f8;学无止境&#xff0c;不骄不躁&#xff0c;知行合一 文章目录 …

数学与计算机(2)- 线性代数

原文&#xff1a;https://blog.iyatt.com/?p13044 1 矩阵 NumPy 中 array 和 matrix 都可以用于储存矩阵&#xff0c;后者是前者的子类&#xff0c;array 可以表示任意维度&#xff0c;matrix 只能是二维&#xff0c;相当于矩阵专用&#xff0c;在一些矩阵的运算操作上较为直…

Python语法糖

N u m P y NumPy NumPy的 n d i t e r nditer nditer nditer 是 NumPy 提供的一种多维迭代器&#xff0c;用于对多维数组进行迭代操作。它可以替代传统的嵌套循环&#xff0c;在处理多维数组时更加方便和高效。 迭代器可以按照不同的顺序遍历数组的元素&#xff0c;也可以控制…