0
点赞
收藏
分享

微信扫一扫

C语言学习之旅 数据的存储

@[TOC]

1.数据类型详细介绍

2.数据的存储

2.1数据类型

  1. 整形

    char、short、int、long、long long

  2. 浮点型

    float、double

  3. 构造类型——自定义类型

    数组、struct 结构体、enum 枚举、union 联合体

  4. 指针类型

    char、int......

  5. 空类型 void

    函数返回类型 void test();
    函数参数 void
    指针 void* p;

2.2 原码反码与补码

为什么计算机中存储的是补码?

因为计算机由逻辑电路组成,而逻辑电路通常只有两种状态,即开关的接通与断开,刚好可以表示成‘1’和‘0’。另外,计算机为了设计简单,只设计了加数寄存器,通过补码的形式可以将减法转换为加法,计算机的CPU只能进行加法操作

2.3 大端存储和小端存储

大端存储:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。

小端存储:是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。

注:CPU对内存单元的寻址是以字节为单位的

  1. 实例 --判断当前编译器是大端字节序还是小端字节序

    //判断是大端字节序还是小端字节序
    int main()
    {
    int a = 1;
    //对于变量a=1:0x00000001(假设从左向右为低地址高地址)
    //小端存储: 01 00 00 00
    //大端存储:00 00 00 01  --->判断首个字节处是否为1即可
    char* pa = (char*) &a;
    if (*pa == 1)
    {
        printf("小端字节序\n");
    }
    else
    {
        printf("大端字节序");
    }
    return 0;
    }
  2. 实例 -- 理解原码、反码与补码
    int main()
    {
    char a = -1; 
    //原码100000000000000000000000000000001
    //反码 111111111111111111111111111111110
    //补码 111111111111111111111111111111111
    //整型提升--发生截断
    //11111111  --> -1 
    signed char b = -1; //同a
    unsigned char c = -1;
    //整型提升:11111111 -->无符号整型,首尾不代表符号位 -->255
    printf("%d %d %d", a, b, c);
    return 0;
    }

2.3 char在内存中的存储

char类型存放的数值, signed char最多是127, unsigned char 的取值范围是 [0,255],signed char 的取值范围是 [-128, 127]

image.png

2.4 浮点数的存储

根据IEEE754标准进行存储,任意一个浮点数V可以表示为下面的形式

(-1) ^ s M E ^ 2 ^ n
S表示符号位
M表示有效数字,且 1 < M < 2
2 ^ E 表示指数位

  • 32位存储

image.png

  • 64位存储

image.png

  1. 实例

浮点数:5.5 -- DEX(十进制)
BIN(二进制)-- 101.1 --> 1.011 2 ^ 2 --> (-1) ^ 0 1.011 * 2 ^ 2
S : 0; M: 1.011; E: 2

当E为无符号数
为了修正E:
foat存储值为 : 原数值 + 127
double存储值为 :原数值 + 1023

特殊:如果E为全0 ,表示+/- 0;如果E全为1,表示+/- 无穷大(在限制领域中)

举报

相关推荐

0 条评论