数据的类型

一、数据的类型

在之前已经见过char 、short、int、long、long long、double、float等类型的数据。

实际上c语言的数据类型可大致分为——整形,浮点型,自定义类型,指针类型。下面来一一介绍

1、整形

char、short、int、long、long long。

char(字符)

或许有疑问为什么char也是属于整形的范畴,实际上字符在内存中存储的是他的ASCII码值,数值是属于整形的,所以char类型变量也被归到整形。

一个char类型的变量在内存中占1byte == 8bit 位,char类型的指针加一可以跳过一个字节的大小。

short(短整形)

一个short类型的变量大小占2byte == 16bit位,short类型的指针加一可以跳过2个字节大小。

int(整形)

一个int类型的变量大小占4byte == 32bit位,int类型的指针加一可以跳过4个字节的大小。

long(长整形)

一个long类型的变量大小占4或8byte的,实际大小依赖环境,取决编译器的不同,在c语言语法规定中,实际上只要求了sizeof (long)>= sizeof (int),所以虽然它叫长整形,它长度也可以为4。

long long(特长整形)

一个longlong类型变量占8byte,longlong类型的指针加一可以跳过8个字节的大小。

2、浮点型

float(单精度浮点型)、double(双精度浮点型)。浮点型通俗的理解也就是小数表示。float在内存中占4个字节,double占8个字节,主要的原因是double的精度比float高,所以占据的内存空间大小也更大。但另一方面double类型的数据运算比float类型的数据运算要慢得多。

二、整形数据在内存中的存储。

数据在内存中以二进制的形式存放,主要的表达形式有原码,反码,和补码。

先介绍一下符号位的概念——对于一个有符号的(signed)整形变量,将其翻译成二进制序列后,从左开始第一位是符号位。1为负号,0为正。

接下来介绍三种码,

原码:直接将整形数据翻译成二进制序列得到

反码:符号位不变,其余的按位取反。

补码:反码加1

注:内存中正数的原反补码相同,而负数需要按上述的方式计算。

既然有三种的表达方式,那在内存中具体是哪一种呢?答案是:补码。

原因是补码可以将符号位和数值位统一起来,加法运算中,用原码参与计算会导致错误的结果,而补码是正确的。

补码得到原码的方式有两种——1、将原码得到补码的方式施行逆变换,得到原码。2、按照得到补码的方式对补码进行相同的操作。第二种方式可以简单的理解为将补码看为原码得到的补码是原码,也就是——补码的补码是原码。

三、大小端

数据类型多样,其大小也不一,在内存中一个地址单位为一个字节大小,也就对应着数据的一个字节。当寄存器的宽度大于1字节时,就涉及到字节的排序问题,也就是我们要讲的大小端字节序。

先给出高、低字节位的定义。

假设一个十六进制的数字的十六进制表示为0x12

一个十六进制位可以翻译为4个2进制数字。则0x12的2进制表示为,00000000000000000000000000010010,单看12的序列为00010010它每一位的代表的数字范围在2^7~2^0间,后面序列中每一位的数字代表的次数高于前面的序列,像12这样一个字节大小的叫做低字节位,往后一个字节大小的叫做高字节位。

大端:高字节位的数据放在低地址,低字节位的数据放在高地址。

小端:高字节位的数据放在高地址,低字节位的数据放在低地址。

在内存中用大端还是小端存储也依赖于环境,VS下的是用小端存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值