C语言 数据存储

整形在内存中的存储(之前的操作符讲过些许但不是很全,现在详细记录)

对于一个整型变量来说,在内存中需要怎样存储?

之前了解到内存中存放的是补码(正数的原反补都相同。回忆一下负数原码,反码,补码:原码是翻译成正负形式的二进制,反码是符号位不变其他位按位取反,补码是在反码的基础上加一。)将其转换成十六进制就是VS编译器中内存存储的内容,但要显示出来还需要进一步解释,下面就是显示分的类型:

下面是一个题目(设计一个可以比较字节序的程序):

下面题目有点坑,需要一步一步慢慢的顺下去,都是求打印的结果:

*例一

做这题需要明确整型提升(用于将较小的整数类型(如char和short)转换为较大的整数类型(至少为int))的步骤。截断是在原码的基础上截断,截断后整型提升成补码。

*例二

在操作符那一博客中,就高不就低知道int要转成unsigned int, 但是两个都是整型不需要转换,只需转成补码进行即可。%u是无符号类型直接打印补码就可以了,%d则是有符号类型需要转成原码打印(假设本身类型就是无符号类型也不需要转成原码直接打印就欧克)。

*例三

无符号整数全是正数,没有符号位的说法。所以i>=0条件不满足将会一直循环下去(死循环)。

浮点型在内存中存储

浮点型在内存中存储的内容是怎样来的?

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:

  • (-1)^S*M*2^E。
  • (-1)^S表示符号位。S=0,为正数;S=1,为负数。
  • M表示有效数字,1<=M<2。
  • 2^E表示指数位。

举两个例子:

复制代码
float f = 5.5f;

在内存中存储的形式由来:

当E = 0时,M在内存中不再加一,而是0.XXXX的小数不再是大于一的(1.XXXX)

*例子

相关推荐
wuminyu3 小时前
ForkJoinPool窃取线程在扫描其他WorkQueue时的随机采样算法与Phase线程挂起唤醒机制解析
java·linux·c语言·jvm·c++
Logic1013 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法
老王爱玩车6 小时前
文件操作从打开到缓冲区
c语言·开发语言·学习
Zwawa7 小时前
传感器模块都在交出什么:从模拟电压到数字协议
c语言·单片机·嵌入式
程序员zgh8 小时前
C++ erase() 函数用法
c语言·开发语言·c++·学习
迪丽热爱9 小时前
一、C语言概述与程序结构
c语言·开发语言·算法
殷色玫瑰11 小时前
AVL树:从平衡因子到四种旋转的完整实现
c语言·数据结构·c++·算法·visualstudio
沐欣工作室_lvyiyi12 小时前
水文信息检测系统的设计与实现(论文+源码)
c语言·单片机设计·柳州工学院·河南工学院·怀化学院·集美大学·辽宁科技学院
007张三丰13 小时前
C/C++ 内存管理详解:从内存分布到 new/delete 底层原理
java·c语言·c++·内存管理
殷色玫瑰14 小时前
C++ STL:map 与 set 详解——从底层红黑树到实际应用
c语言·数据结构·c++·算法·visualstudio·rpc