数据的存储

文章目录

数据类型的分类

整形在内存中的存储

浮点数在内存中的存储

一.数据类型的分类

        不同数据类型的意义:根据不同的数据类型的范围,来选用适合的数据类型节约内存空间。

1.整形

        char,short,int,long有有无符号之分,但统归于整数。字符在存储时, 本质存储的是ASCII码,所以也属于整数类型。

2.浮点数

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

4.指针类型

5.空类型

 

二.整形在内存中的存储 

1.原码,反码,补码

        整数在内存上存放的二进制。整数的二进制表示形式有三种:原码,反码,补码。正数的原码,反码,补码是相同的。三种表示法均与符号位和数值为两部分组成。符号位是最高位,剩余的都是数值位。

        原码:按照正负形式翻译成的二进制码。

        反码:除符号位外全部取反(0变成1,1变成0).

        补码:反码的值+1.

       正数的原码,反码,补码是相同的。

2.小端存储和大端存储

        小端字节序存储:把一个数据的低位字节的内容,存放在低地址处,把高位字节的内容存放在高地址处。

        大端字节序存储:把一个数据的低位字节的内容,存放在高地址处,把高位字节的内容存放在低地址处。

3.如何判断大小端

int a = 1;
//在内存中小端存储:01 00 00 00
//在内存中大端存储:00 00 00 01
if((*(char*)&a)==1)
{
    printf("小端存储\n");
}
else
    printf("大端存储\n");

 

4.整数在内存中的存储 

三.整数在内存中存储例题

例1:

        -1的原码是1000 0000 0000 0000 0000 0000 0000 0001,取反+1后是补码:1111 1111 1111 1111 1111 1111 1111 1111,存入char类型a中,因为char类型是一个字节,所以装不下,发生了截断。截断会把低字节位的部分保留,所以存入a中的是1111 1111。以%d的形式打印(以十进制的形式打印有符号整数),而a,b,c都是char类型,会发生整型提升补齐。a和b补齐,因为a和b是有符号,会补齐1,32位都是1,转换为源码后为-1。c是无符号char,高位会全补为0,变成正数,正数的原反补是一样的,求得为255。

例2:

        求得-128的原码,反码,补码。存入a中发生截断,又以十进制无符号正数类型打印,会发生整型提升,补齐的数为符号位,补齐1,又因为是无符号数,原码反码补码相同,求得是一个很大的数。

例3:

        因为和例2一样发生截断,虽然正负号不一样,但是存入char的二进制是一样的,所以解题过程一样,结果一样。

例4:

 

        求得-20的原码,反码,补码以及10的原码,相加得到新数字的补码,又因为以有符号的十进制整数打印,不能忽略符号位,转换为原码后为-10。 

例5:

        因为是无符号整形,当i为1发生减减后,i会变成32位个1,因为无符号,所以是极大值。

 

例6:

 

        i的取值0~999,理论上a[i]的取值是-1,-2,-3...1000。但是a数组是char类型的,取值位-128~127。所以数组中存储的是-1,-2,-3......1000,-1,-2......依次循环。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值