C语言进阶:一.数据的存储(1)

以下是关于数据类型的详细介绍,内容进行了伪原创处理,以保持原意不变。

C语言进阶:一.数据的存储(1)

1. 数据类型详细介绍

1.1 类型简介

类型的意义:

  1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)
  2. 如何看待内存空间的视角

类型的基本归类:

  • 整型数据:用于存储整数值,如int、short、long等。
  • 浮点数类型:用于存储带小数点的数值,如float、double。
  • 自定义类型:由用户定义的数据结构,如结构体、联合体等。
  • 指针类型:用于存储内存地址的变量。
  • 空类型:表示无类型或无返回值,如void。
void test(){} // void test(void){}
void* p

1.2 整型在内存中的存储

当创建一个变量时,需要在内存中分配空间。空间的大小取决于不同的类型。

那么,数据在所分配的内存中是如何存储的呢?

立即学习“C语言免费学习笔记(深入)”;

#include
int main(){
    int a = 20;
    int b = -10;
    return 0;
}

C语言进阶:一.数据的存储(1)

我们知道为 a 分配了四个字节的空间。那么,a 是如何存储的呢?

2. 整型在内存中的存储:原码、反码、补码

计算机中的整数有三种二进制表示方法,即原码、反码和补码。 三种表示方法均有符号位和数值位两部分,符号位用0表示“正”,用1表示“负”,而正数的原码、反码、补码都相同。

负整数的三种表示方法各不相同:

  • 原码:直接将数值按照正负数的形式翻译成二进制就可以得到原码。
  • 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
  • 补码:反码加1就得到补码。
#include
int main(){
    int a = 20; // 正数的原码、反码、补码都一样
    // a的原码:00000000 00000000 00000000 00010100
    // a的补码:00000000 00000000 00000000 00010100
    // a的反码:00000000 00000000 00000000 00010100
    int b = -10; // b的原码:10000000 00000000 00000000 00001010
    // b的反码:11111111 11111111 11111111 11110101
    // b的补码:11111111 11111111 11111111 11110110
    return 0;
}

对于整型来说,数据在内存中实际存储的是补码。

C语言进阶:一.数据的存储(1)

我们可以看到,对于a和b分别存储的是补码。但是我们发现顺序有点不对劲。这是为什么呢?

3. 大小端字节序介绍及判断

1. 什么是大端小端?

大端和小端是指数据在内存中的存储顺序。大端字节序(Big Endian)是指数据的高位字节存储在低地址,而小端字节序(Little Endian)是指数据的低位字节存储在低地址。

2. 为什么有大端和小端?

大端和小端的存在主要是为了解决不同处理器架构之间的兼容性问题。不同的处理器可能会采用不同的字节序,因此在数据传输和存储时需要考虑字节序的问题。

网友留言(0 条)

发表评论