我是靠谱客的博主 安详康乃馨,这篇文章主要介绍C语言-数据在内存中的存储 整数在内存中以二进制序列存储,现在分享给大家,希望可以做个参考。

创建任一数据类型都会在内存占用一块空间,其空间占用大小与数据类型有关。

复制代码
1
2
3
4
5
6
7
//常见类型 char //字符 占用1个字节,即8个bit,内存以二进制序列存储8位 short //短整型 2 16 16 int //整型 4 32 32 float //单精度浮点型 4 32 32 double //双精度浮点型 8 64 64

了解到以上常见类型后,我们继续深入了解其归类:

unsigned(有符号)        signed(无符号)

什么是有符号,什么是无符号?

该数据类型是有符号时,可以存储正负数;无符号,则存储正数(也可以存储负数,但)。

整型类:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
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;

举例说明:

复制代码
1
2
3
4
5
6
7
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进制位

复制代码
1
2
3
2进制 1111 1111 1111 1111 1111 1111 1111 1100 16进制 f f f f f f f 6 ->ffffff6
复制代码
1
2
3
4
5
6
7
8
9
#include<stdio.h> int main() { int a = -10; printf("%dn", a); return 0; }

 但可以发现内存中,是以f6 ff ff ff这样的方式存储的,为什么会这样?

这时我们要引入:大小端字节序存储。

了解大小端之前,我们需要先了解数据的高位低位。

对于一个数据:            低位   0x11223344   高位

从左到右,从低到高;

大端存储模式:        内存低地址   (高位) 0x44332211 (低位)   内存高地址   

数据的高位存于内存低地址,而低位存于高地址;

小端存储模式:        内存低地址   (低位) 0x11223344 (高位)   内存高地址

数据的低位存于内存低地址,而高位存于高地址;

那么这就是数据的存储的基本内容了。

最后

以上就是安详康乃馨最近收集整理的关于C语言-数据在内存中的存储 整数在内存中以二进制序列存储的全部内容,更多相关C语言-数据在内存中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部