数据的存储

1.数据类型的详细介绍

1 .整型家族

char 并不等于 signed char(常见的编译器下就相等)

char到底是signed char还是unsigned char是取决于编译器实现的

2.浮点数家族

long double

3.构造类型(自定义类型)

数组类型

结构体类型 struct

枚举类型 enum

联合类型 umion

4.指针类型

5.空类型

void表示空类型(无类型)

通常用于函数的返回类型、函数的参数、指针类型

_Bool 布尔类型,实际上还是int类型,只是将1定义为true,将0定义为flase(C99)

2.整型在内存中的存储

2-1.原码、反码、补码

计算机中的整数有三种表示方法,即原码、反码、补码

三种表示方法均有符号位和数值位两部分,符号位都是用0表示"正",用1表示"负",而数值位负整数的三种表示方法各不相同。

2-1-1.原码

按照一个数的正或负直接写出来的二进制就是原码

2-1-2.反码

符号位不变,其他位按位取反

2-1-3.补码(内存中储存)

反码的二进制序列 + 1,得到补码

整数的原、反、补码相同

对于整型来说:数据存放内存中其实存放的是补码

在计算机系统中,数值一律用 补码来表示和存储。使用补码,可以将符号位和数值域统一处理;

同时加法和减法也可以统一处理(CPU只有加法器),此外,补码与原码 相互转换,其运算过程是相同的,不需要额外的硬件电路。

计算机中只有加法器

减、乘、除法用加法模拟出来 1-1 --> 1 + (-1)

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

3-1.什么是大端小端

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中

int main()
{   -1 --> 11111111111111111111111111111111-->(截断) 11111111 --> a, b, c

    char a = -1;   --> 11111111 -->(整型提升) 11111111111111111111111111111111
     -->1111111111111111111111110 -->100000000000000000000001--> -1

    signed char b = -1;  同上

    unsigned char c = -1;  --> 
    11111111 -->(整型提升) 00000000000000000000000011111111 -->255
    
    printf("a=%d b=%d c=%d", a, b, c)  // a=-1 b=-1 c=255
}
int main()
{    -128 --> (原码)100000000000000000000000010000000 --> 
     (补码)111111111111111111111111110000000 --> (截断)10000000   
     
     char a = -128; 10000000 -->(整型提升) 11111111111111111111111110000000

     printf("%u\n", a); 4294967168
}

4.浮点型在内存中的存储解析

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成以下形式:

(-1)^S * M * 2^E

(-1)^S 表示符号位,当 S = 0,V位正数;当 S = 1,V为负数

M 表示有效数字,大于等于1,小于2

2^E 表示指数位(会进行修正,再存储 23bit + 127 52bit + 1023 )

M中第一位总是1,所以默认为1,23个bit全存小数点后的数 对于32位的浮点数,最高1位是符号位S,接着8位是指数E,剩下23位为有效数字M

(浮点数无原、反、补码) 对于32位的浮点数,最高1位是符号位S,接着11位是指数E,剩下52位为有效数字M

5.5
5 --> 101
0.5 -->  (2^-1) --> (二进制) 0.1      (0.01(二进制) --> 2^-2 --> 0.25(十进制)))
5.5 --> 101.1
5.5 --> 1.011 * 2^2
5.5 --> (-1)^0 * 1.011 * 2^2

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值