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

数据在内存中的存储(整型篇)

1.辨析原码反码补码:

        1.原码:有32位(int类四个字节,一个字节八个比特位),第一位是符号位,0正1负,其余为二进制位。

        2.计算一般是对原码进行计算,但在负数计算使用原码会导致程序出错,所以负数计算中使用反码,反码就是除了符号位,其余位置取反,反码存在的原因就是负数的计算

        3.虽然有了反码,但遇到负数跨0比如-6+7=1的问题时无法解决,所以产生了补码,补码等于负数的反码加1

2.正整数的原码补码反码都相等,负数的原码正常,反码为第一位不变其余位按位取反,补码位反码加一

3.在整形存储中一般以补码的形式存在,因为这样可以使符号位与数值位统一处理,加法和减肥都可以统一处理(cpu只有加法器),其运算过程是相同的不需要额外硬件

4.大端和小端:超过1字节的数据在存储的时候就会存储顺序的问题,按照不同的存储顺序,分为大端字节序存储和小端字节序存储:

        1.大端模式:数据的低位字节内容保存在内存的高地址处,数据的高位字节内容保存在内存的低地址处

        2.小端模式:低位字节内容保存在内存的低地址处,高位字节内容保持在高地址处

5.大小端存在的原因:

6.判断大小端的方法

7.例题:

析题:在内存中,数据储存首先进行一个截断操作,将变量补码的后八位取出,然后会进行一个还原操作,会用符号位的数值将截断码补成32位,补充之后的码继续作为原码。以‘%d'的形式打印,就是打印一个十进制有符号的整数,而操作对象是变量的补码,a,b两个变量的补码的运算结果为-1,而c的补码首位是0.所以它的补码等于原码等于它本身,所以是255

8.例题2:

析题:内存存储

%u表示打印十进制无符号整型,上表表示了在内存中所有有符号字符型的存储可能(8个字节),可以发现范围是+127到-128,而中间的0000000会自动解析为128,无符号字符型的取值为0到255,

而无符号整型的补码是它自己,直接把128的补码的截断补充的形式打印出来

9.例题3

答案是256,为啥?

析题:

char类型的整型范围有以上规律,是一个闭合的环,而strlen函数就是找\0,而'\0'的asc码值为0,就是找char 0的位置,按照上图正好循环一圈,为255个数

10.例题4

析题:无符号整型也是一个闭环,0-1等于2的33次方-1(2的33次方减1然后加一为2的33次方,但int只能储存2的32次方,所有按照截断方法来看该值就是0),就是所有位都是1然后再减。

11.在强转出现时,应先计算右侧式子,然后再进行强转

12.例题五

析题:

先假设数据的存储是小端类型:

01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00

p1取的是数组的地址,加一代表指针指向了数组最后一个元素的后面,此时指针类型为数组指针,

此时将指针转化为int*型,每次进行运算时移动四个字节,而p1[-1]代表向前移动四个字节,然后读取,为4,而p2的运算,依据11,指向2的同时进行类型转换为int类型,而转换为int类型的同时编译器会读取向后的四位为一个数字2000000,前面的0不读取,然后转换为int*类型然后读取打印,结果为2000000。
 

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

相关文章:

  • 大一作业习题
  • Python大模型TensorFlow/PyTorch/Scikit-learn/Keras/OpenCV/Gensim
  • TCP 和 UDP 区别? 2、TCP/IP 协议涉及哪几层架构? 3、描述下 TCP 连接 4 次挥手的过程?为什么要 4 次挥手?
  • pyside/qt03——人机协同的编程教学—直接面向chatGPT实战开发(做中学,事上练)
  • swing快速入门(五)
  • 银河麒麟v10系统SSH远程管理及切换root用户的操作方法
  • 设计模式——建造者模式(Java示例)
  • 深入探索 Spring Boot:简化开发,加速部署的全方位利器
  • SpectralGPT: Spectral Foundation Model 论文翻译3
  • ubuntu-c++-可执行模块-动态链接库-链接库搜索-基础知识
  • HTML中使用JavaScript实现一个简单的鼠标悬停特效。
  • 深入.NET平台和C#编程总结大全
  • jOOQ的使用场景
  • Pytorch-Transformer轴承故障一维信号分类(三)
  • pycharm多线程报错的问题(未解决)
  • 【常用字符大全】含emoji表情
  • android 蓝牙开关设置
  • C++ extern “C“ 用法
  • HTML面试题---专题四
  • stm32项目(11)——基于stm32的俄罗斯方块游戏机
  • 【计算机网络基础2】IP地址和子网掩码
  • ES6-import后是否有{}的区别
  • rv1126-rv1109-以太网功能-eth-(原理篇)
  • 【IDEA】反向撤销操作快捷键 ctrl+shift+z 和搜狗热键冲突的解决办法
  • 数据结构之----逻辑结构、物理结构
  • pip 通过git安装库
  • C语言——从终端输入 3 个数 a、b、c,按从大到小的顺序输出。
  • 【JVM从入门到实战】(二)字节码文件的组成
  • OPC UA常见故障信息代码
  • 第20关 快速掌握K8S下的有状态服务StatefulSet