【C语言复习】第四篇、有关C语言数据类型的知识

文章介绍了C语言中不同数据类型如char、int、long等的内存占用、数值范围以及补码的概念,强调了数据类型多样性的意义和计算机存储单位。还讨论了字符类型在ASCII码中的表示,并提及了类型转换和浮点数家族。
摘要由CSDN通过智能技术生成

目录

第一部分、前言

第二部分、初识数据类型 

1、C语言为啥要这么多的数据类型?

2、表格中所占内存的大小是如何计算得到的?

2.1、计算机的内数据存储单位

2.2、关键字sizeof的使用说明(具体后面会更详细的解释)

3、为什么char类型的数值范围是-128~127,为啥不是-127~128?

3.1、整型数据在计算机内的编码方式

3.2、为啥要补码?

3.3、回答char类型的数值范围为啥是-128~127?

4、为啥int和long的数值范围是一样的?

5、这些类型如何输出?

6、如何将一个类型转换成另一个类型?

第三部分、进阶数据类型 

 1、整型家族

1.1、为什么char和unsigned char属于整型?

1.2、26个大小写英文字母的ASCII码数值

2、浮点家族

第四部分、总结及内容全览


第一部分、前言

        该文章是我复习C语言的笔记,笔记中给出的各种问题及解答都是我之前不会的,或者我之前存在疑惑的,或者我新学到的,所以很多细节的地方还希望大家去参考详细的学习资料。

第二部分、初识数据类型 

        文章是我复习C语言的笔记,所以笔记中给出的各种问题及解答都是我之前不会的,或者我之前存在疑惑的,或者我新学到的,所以很多细节的地方还希望大家去参考详细的学习资料。

数据类型

名称

占内存的大小

表达的数值范围

char

字符数据类型

1byte

-128~127

unsigned char

无符号字符数据类型

1byte

0~255

short(int)

短整型

2byte

-32,768~32,767

unsigned short(int)

无符号短整型

2byte

0~65535

int

整形

4byte

-2^31~-2^31-1

unsigned int

无符号的整型

4byte

0~2^32-1

long(int)

长整型

4byte

-2^31~-2^31-1

long long(int)

更长的整形

8byte

-2^63~2^63-1

float

单精度浮点数

4byte

-3.4x10^-38 ~ 3.4x10^38

double

双精度浮点数

8byte

-1.7x10^-308 ~ 1.7x10^308

1、C语言为啥要这么多的数据类型?

        这么多的数据类型,其实是为了更加丰富的表达出生活中的各种数值提高空间利用率。也可以这样理解学习C语言主要是为了和计算机沟通,增加这些数据类型能够提高与机器对话的效率。

2、表格中所占内存的大小是如何计算得到的?

2.1、计算机的内数据存储单位

        在解决这个问题之前,首先明白下面两个问题:

  • 计算机最小的数据存储单位是字节(Byte)(这个很重要,记住!)
  • 计算机最小的数据传输单位是:位/比特(bit)

内存的换算关系如下:

        1TB  = 1024GB

        1GB  = 1024MB

        1MB  = 1024KB

        1Kb   = 1024byte(字节)

        1byte = 8 bit(比特/位)

  • 那我又有一个疑问,那32位机和64位机又是什么意思呢? 

        其实这表示处理器一次处理数据的能力,32位 = 一次能处理32bit位的数据,64位 = 一次能处理64bit为的数据。

2.2、关键字sizeof的使用说明(具体后面会更详细的解释)

        关键字sizeof:以字节为单位给出与变量或类型在内存中所占的空间大小。

3、为什么char类型的数值范围是-128~127,为啥不是-127~128?

3.1、整型数据在计算机内的编码方式

        计算机中的编码方式主要有原码,反码,补码三种方式。而对于整形来说:数据存放内存中其实存放的是补码。

  • 正数的原码、反码、补码三者一致;

例如:int a = 666

        原码 = 反码 = 补码 = 00000000 00000000 00000010 10011010

  • 负数的补码 = 原码符号位不变,取反再加1;

例如:int a = - 666

        原码 = 10000000 00000000 00000010 10011010

        反码 = 111111111 111111111 111111101 01100101

        补码 = 111111111 111111111 111111101 01100110

  • 得到了补码,怎么将补码又变成原码呢?

法一、原码 = 补码符号位不变,取反再加1;(好记)

        补码            = 111111111 111111111 111111101 01100110

        补码的反码 = 10000000 00000000 00000010 10011001

        原码            = 10000000 00000000 00000010 10011010

法二、逆过程推算,原码 = 补码减1,符号位不变再取反 ;(不好记) 

        补码            = 111111111 111111111 111111101 01100110

        补码减一     = 111111111 111111111 111111101 01100101

        原码            = 10000000 00000000 00000010 10011010

3.2、为啥要补码?

        在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理(CPU只有加法器减法运算是通过转化成加法运算来实现的)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路

  • 为啥说补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路?

        由上述补码求反码的反码的方法一可知:对于负数,其补码 = 原码符号位不变,取反再加1;原码 = 补码符号位不变,取反再加1;会发现这个原码到补码,补码再到原码这个过程是一致的。

3.3、回答char类型的数值范围为啥是-128~127?

        char大小为1个字节,最高位表示符号位,又因为0000 0000表示0,那么1000 0000的最高位为符号位,总不能它也表示为0,为了提高存储效率,计算机就直接将1000 0000翻译为-128。

        下图可以帮助理解:

4、为啥int和long的数值范围是一样的?

        正常理解下long的数值范围应该是比int数值范围要更广,但是表格中为啥一致呢?

        其实这个不是绝对的,这是取决于当前的编译器,在vs2017的编译器中默认int和long的数据类型大小一致。

5、这些类型如何输出?

%d

int

%c

char

%s

字符串

%u

unsigned int

%f

float

%lf

double

%p

打印地址printf("%p",&a);//观察a的地址,以16进制打印

%x

printf("%x",50);16格式进制打印

6、如何将一个类型转换成另一个类型?

        实现类型之间的转换可以通过强制类型转换的方法来实现。如下图,8.66为浮点类型的数据,通过:(类型)变量 的方式来实现强制类型转换。

第三部分、进阶数据类型 

        关于数据类型进阶的知识就会设计到数据存储的问题,数据存储的文章如下:

 1、整型家族

        下面都为整型家族的数据类型。

char = signed char//大多数编译器都是这么规定的,但是C99没有明确规定
unsigned char

short = signed short [int]
unsigned short [int]

int = signed int
unsigned int

long = signed long [int]
unsigned long [int]

1.1、为什么char和unsigned char属于整型?

         这也是我之前很疑惑的地方,其实这和计算器的存储有关系,根据ASCII码表可以知道,每个英文字母都对应一个ASCII码的数值,而这些数值都是整数。我个人的理解是字符其实在内存中是以整数的形式进行保存的。因此字符类型归属于整型家族。

1.2、26个大小写英文字母的ASCII码数值

        做个记录,方便自己查找。

大写字母ASCII值小写字母ASCII值
A65a97
B66b98
C67c99
D68d100
E69e101
F70f102
G71g103
H72h104
I73i105
J74j106
K75k107
L76l108
M77m109
N78n110
O79o111
P80p112
Q81q113
R82r114
S83s115
T84t116
U85u117
V86v118
W87w119
X88x120
Y89y121
Z90z122

2、浮点家族

float
double

第四部分、总结及内容全览

        数据类型这里只是简单后复习了一下,以上为博主复习总结的一些知识点,有很多的不足,还希望读者见谅。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大屁桃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值