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

目录

第一部分、前言

第二部分、初识数据类型 

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值
A 65 a 97
B 66 b 98
C 67 c 99
D 68 d 100
E 69 e 101
F 70 f 102
G 71 g 103
H 72 h 104
I 73 i 105
J 74 j 106
K 75 k 107
L 76 l 108
M 77 m 109
N 78 n 110
O 79 o 111
P 80 p 112
Q 81 q 113
R 82 r 114
S 83 s 115
T 84 t 116
U 85 u 117
V 86 v 118
W 87 w 119
X 88 x 120
Y 89 y 121
Z 90 z 122

2、浮点家族

float
double

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

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

猜你喜欢

转载自blog.csdn.net/Learning1232/article/details/129758672
今日推荐