整型的存储方式
整型的分类
整型大致分为:char、short、int
char:字符型, 占1个字节的空间
short:短整型,占2个字节的空间
int: 整型, 占4个字节的空间
存储方式
这里声明,借用我在讲【C语言】— 操作符中的部分内容
整数的二进制表示形式:原码、反码、补码
- 正整数的原码、反码、补码是相同的
- 负的整数是要计算的
- 一个int整型变量所占4个字节,因此就是32个比特位,一个比特位就是一个二进制位,因此32个二进制位存储该数据 如下:
整数在内存中是用补码进行存储的,也是用补码进行计算的
接下来讨论内存中的数据与地址大小的关系
首先,从整体来看,数据是由高地址向低地址存放的
一个地址管理一个字节的内存,而像 int 这样的整型创建的变量占4个字节,就需要4个地址来管理
我们平时所说的变量的地址,实际上是这4个地址的首地址,也就是4个地址中最低的那个地址
如下图,两种存储顺序
像这样的存储顺序叫做字节序:是以字节为单位,讨论存储顺序的
- 小端字节序存储:
- 把一个数据的低位字节的内容,存放在低地址
- 把一个数据的高位字节的内容,存放在高地址
- 大端字节序存储:
- 把一个数据的低位字节的内容,存放在高地址
- 把一个数据的高位字节的内容,存放在低地址
计算机是按照小段字节序存储的。
写一个函数,判断当前机器用大端字节序存储还是小端
int main()
{
因为char*类型的指针只能访问一个字节的内容
如果是小端,那么访问到的值就是44,如果是大端,就是11
这里注意,存放的是十六进制数,打印的时候要用%x
int n = 0x11223344;
char* p = &n;
printf("%x", *p);
return 0;
}
浮点型的存储方式
浮点型有哪些类型?
float、double、unsigned float、unsigned double
- float与double都是有符号的类型(有正负)
- 剩余两个是无符号型(非负数)
float ------------------------ 4个字节
unsigned float ----------- 4个字节
double --------------------- 8个字节
unsigned double -------- 8个字节
在系统中的存储方式
浮点数都可以表示为:V = (-1)S * M * 2E
解释:
- 若S == 0,V是正数;若S == 1,V是负数
- M是一个>=1且<2的数
- 2E表示整数位
- E,小数点向左移动E位(E可以使负数)
举个例子:
标签:存储,字节,int,double,C语言,---,地址,整型,进阶 From: https://blog.csdn.net/weixin_59005084/article/details/139304633十进制数:5.5
转换为二进制:101.1
- 1*22 + 0*21 + 1*20 + 1*2-1 == 5.5
- 101.1可以用 (-1)0 * 1.011 * 22表示 S==0,M == 1.011,E == 2
- 这里的M和E实际用的是科学计数法表示一个二进制数
- E的值 == 2,表示的是二进制数的小数点向左移E位
- M是一个大于等于1小于2的数,因此保存M的值是可以不保存这个1,系统默认有这个1,因此可以节省一个bit的空间存放其他值
- 既然用S、M、E就可以表示一个浮点数,那么系统只需存储这3个值即可
- 下面是浮点型在内存中的存储方式