概述
创建任一数据类型都会在内存占用一块空间,其空间占用大小与数据类型有关。
//常见类型
char //字符 占用1个字节,即8个bit,内存以二进制序列存储8位
short //短整型 2 16 16
int //整型 4 32 32
float //单精度浮点型 4 32 32
double //双精度浮点型 8 64 64
了解到以上常见类型后,我们继续深入了解其归类:
unsigned(有符号) signed(无符号)
什么是有符号,什么是无符号?
该数据类型是有符号时,可以存储正负数;无符号,则存储正数(也可以存储负数,但)。
整型类:
char //取决于编译器,大多数是有符号 unsigned char signed char short //默认有符号 等价于signed short unsigned short signed short int //默认有符号 等价于signed int unsigned int signed int long //默认有符号 等价于signed long unsigned long signed long
所以对于int, short, long而言,C语言规定默认为有符号,可以存储正负数;
char则需要根据编译器自身。
浮点类:
float, double, long double全都默认为有符号;
整数在内存中以二进制序列存储
整数的二进制序列有三种表示方法,分别为原码,反码,补码;
在内存中,所有整数都以补码的形式存储在内存中;
对于正数,原码,反码,补码都相同;
而对于负数,原码都是整数的二进制值;
反码则是对原码按位取反(~);
补码是在反码基础上+1;
举例说明:
int a = -10; //原码: 10000000 00000000 00000000 00000100 可以看出原码就是整型的二进制值, //同时int类型在内存中占据4个字节,1个字节8个bit位,所以是32位。 //反码: 11111111 11111111 11111111 11111011 反码则是对原码~(按位取反), //符号位不变,其余0→1,1→0。 //补码: 11111111 11111111 11111111 11111100 补码=反码+1
除此以外,编译器为了方便观察,可以转为16进制位
2进制 1111 1111 1111 1111 1111 1111 1111 1100 16进制 f f f f f f f 6 ->ffffff6
#include<stdio.h> int main() { int a = -10; printf("%dn", a); return 0; }
但可以发现内存中,是以f6 ff ff ff这样的方式存储的,为什么会这样?
这时我们要引入:大小端字节序存储。
了解大小端之前,我们需要先了解数据的高位和低位。
对于一个数据: 低位 0x11223344 高位
从左到右,从低到高;
大端存储模式: 内存低地址 (高位) 0x44332211 (低位) 内存高地址
数据的高位存于内存低地址,而低位存于高地址;
小端存储模式: 内存低地址 (低位) 0x11223344 (高位) 内存高地址
数据的低位存于内存低地址,而高位存于高地址;
那么这就是数据的存储的基本内容了。
最后
以上就是安详康乃馨为你收集整理的C语言-数据在内存中的存储 整数在内存中以二进制序列存储的全部内容,希望文章能够帮你解决C语言-数据在内存中的存储 整数在内存中以二进制序列存储所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复