当前位置: 首页 > news >正文

整型在内存中的存储

目录

一、为什么内存中存储补码?

 二、大小端概念

百度笔试试题:

 几道小题:


一、为什么内存中存储补码?

上一节我们了解了原码,反码,补码的概念(http://t.csdn.cn/N0grg),也知道了对于整型来说,数据存放内存中存的是补码,可是为什么存储补码而不存储宜于理解的原码呢,这是因为计算机只有加法器,如果只运算加法,那么利用原码计算没有任何问题,比如5+2=7

那么减法呢,如果计算机是人脑,那么它可能会这样计算10-2=8

 但是注意,计算机可不会像人脑一样认识减法,实际的情况是CPU只有加法器,也就是他只能计算加法,却计算不了减法,那么怎么办呢,于是就有了补码的诞生,比如我们要计算1-1,这是计算机会把1-1识别为1+(-1),并且以补码的方式计算,如图

 并且原码与补码的相互转换,运算过程是相同的,上节 (http://t.csdn.cn/N0grg)我们知道了原码转换为补码的方法,那么由补码转换为原码很明显就是原码转化为补码的逆过程,但是实际上他们可以是相同的运算过程,如图:


 二、大小端概念

我们不难发现调试的内存监视窗口中,数据似乎是倒着存储的,如图:

 对于变量a,这里的值应为0x00000014(0x表示十六进制),可是内存中却倒着显示,这是因为在计算机系统中,存在着两种存储模式。

大端(存储)模式:指数据的低位保存在内存的高地址中,数据的高位,保存在内存的低地址中。

小端(存储)模式:指数据的低位保存在内存的低地址中,数据的高位,保存在内存的高地址中。

 注意:大小端字节序由机器本身决定,与编译器无关。


百度笔试试题:

请简述大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。

#include<stdio.h>int check_sys()
{int i = 1;return (*(char*)&i);
}int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

 几道小题:

(1)下面代码的结果是:255

int main()
{char a[1000] = {0};int i=0;for(i=0; i<1000; i++){a[i] = -1-i;}printf("%d",strlen(a));return 0;
}

可以利用头文件limits.h查询char可以存储多大的数据,输入CHAR_MAX鼠标右击转到定义:

 即char类型存储数据大小范围是-128到127,对于此题,a[0]=-1,依此类推负数最多到-128,而-128再-1,由于char类型负数最多到-128,所以此时a[i]的值会变为127,再到0,而strlen函数识别到\0,\0的ASCII码值为0,所以结果为128+127=255,打印的结果为255。


在32位大端模式处理器上变量b等于( )

unsigned int a= 0x1234;
unsigned char b=*(unsigned char *)&a;

大端序中,低地址到高地址的四字节十六进制排列分别为00 00 12 34,其中第一个字节的内容为00。

http://www.lryc.cn/news/90238.html

相关文章:

  • 子集-回溯算法
  • 公司study three
  • 【运维】speedtest测试
  • CycloneDDS开源代码在Linux系统上编译生成可执行文件的详细步骤
  • PLL锁相环的一部分--鉴频鉴相器
  • CSS实现磨砂玻璃(毛玻璃)效果样式
  • Solidity拓展:数学运算过程中数据长度溢出的问题
  • 【C语言】经典题目(一)
  • Linux 设备树文件手动编译的 shell 脚本
  • C++核心编程——初识STL——STL的基本概念和六大组件
  • 5.2图的BFS与DFS遍历
  • JSP+SQL网上选课系统(源代码+论文+答辩PPT)
  • C语言数据结构——树、堆(堆排序)、TOPK问题
  • springboot+vue 刘老师
  • 学生网上考试报名系统的设计与实现
  • Jmeter实现分布式并发
  • 动态xml文件配置 hibernate validator 约束校验
  • Vue绑定class样式与style样式
  • 集权攻击系列:如何利用PAC新特性对抗黄金票据?
  • 同程面试(部分)(未完全解析)
  • 讯飞星火_VS_文心一言
  • Java的集合
  • addr2line 使用,定位kernel panic 代码位置
  • OpenAI目前所有模型介绍
  • 【P43】JMeter 吞吐量控制器(Throughput Controller)
  • 方正书版命令详解
  • Gradio的web界面演示与交互机器学习模型,高级接口特征《6》
  • 本地项目上传到Git(Gitee)仓库
  • Android 12.0屏蔽掉SystemUI的某些通知提示音
  • 测试计划模板二