C语言之路第十四天:数据的存储(一)

一,C语言的数据类型

1,内置类型

int char long longlong short float double等

2,自定义类型

二,数据的基本类型

1,整型家族

char类型

        unsigned char,signed char

short类型

        unsigned short,signed short

int类型

        unsigned int,signed int

long类型

        unsigned long,signed long

对于上面几个数据类型来说,unsigned都是无符号类型,signed都是有符号类型,

那么char本应该是字符类型,那为什么是属于整型家族的呢,其实char类型在内存中存储的是字符对于的assic码值,这样说是整型家族就理所当然了。

2,浮点型家族:

        float:单精度浮点型

        double:双精度浮点型

3,构造类型

        数组类型(如int[10],char[5],数组的定义去掉数组名就是数组类型了)

        结构体类型struct

        枚举类型enum

        联合类型union

4,指针类型

        如int* p,char*p,float* p,void*p等

5,空类型

        void表示没有类型,空类型,通常用于函数的返回值,函数的参数,指针类型等

三,整型在内存中是如何存储的

1,原码,反码,补码

计算机在整型的存储有三种方式,即原码,反码,补码

其中对于无符号数三者相同,对于正整数三者也相同

这三种表示方式均有符号位和数值位构成,符号位为0表示正数,符号位为1表示负数,则三种的数值位表示有所不同

原码:直接按照正负数的形式翻译成二进制得到原码

反码:除符号位其它位按位取反,得到反码

补码:反码+1得到补码

整型数据在内存中是以补码的形式存储的

 看上图,整型在显示的时候是十六进制,并且是倒着放的,这是为什么呢?

这就不得不说一下大小端了

首先,什么是大小端呢?

内存编号小的叫低地址,编号大的叫高地址

大端存储模式:数据的低位存储在内存的高地址,数据的高位存储在内存的低地址

小端存储模式:数据的地位存储在内存的低地址,数据的地位存储在内存的高地址

这里存储顺序都是指的是字节

如:0x 11 22 33 44,高位是11,低位是44,并且地址右边是高地址,左边是低地址

则它的大端存储模式就是:0x 11 22 33 44

小端存储模式就是:0x 44 33 22 11

四,下面写一个代码判断某机器上是大端存储还是小端存储

思路:一个数字存储在内存中大小端不同,取出其存储在内存的第一个字节们就可以分辨了,访问一个字节可以用char*指针

 我们已经知道1的大端存储和小端存储的值,则如上只需要取出第一个字节,就可以判断是大端存储还是小端存储了

下面用函数封装:

 五,看几个习题

1,

 -1的补码:11111111111111111111111111111111

a:11111111,b:11111111,c:11111111

由于a,b均为有符号数,则在整型提升的时候是会变成:11111111111111111111111111111111

而c是无符号数,整型提升补0,会变成:00000000000000000000000011111111

而这是补码,换成原码是:

a:10000000000000000000000000000001,即为-1

b:10000000000000000000000000000001,即为-1

c:00000000000000000000000011111111,即255

2,

这里首先是char为有符号数,在截断之后进行整型提升的时候要按符号位提,符号位是1,因此都提1,不是提升0,提升时要看原数据类型,以及其符号位,不能看截断之后的

注意:有符号char:-128~127

           无符号char:0~255

 

 2,3两个结果是一样的,这是什么原因呢?

是因为:对于char正数只能最大是127,128相当于127+1,而下图又说明了在127之后再+1,得到的是-128,也就是说这两个程序,本质上a都是-128

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值