您好,欢迎进入 官方网站!
重要程度:★★★★
在C语言中,有三种基本的数据类型,它们是整型、实型和字符型。
1、数制转换
二进制的数,基为二,某位出现的最大数字是2-1=1;
八进制的数,基为八,某位出现的最大数字是8-1=7;
十六进制的数,基为十六,某位出现的最大数字是f(相当与十进制的15)。在十六进制中,数字由十六个代码组成,分别是0~9和A~F(或者是a~f)这十六个代码。
表1列举出十进制数字从0~15时,相应的二进制、八进制和十六进制数字。(同列的为一组,表示相同的值)
表1 十进制、二进制、八进制和十六进制对照表
十进制 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
二进制 |
0 |
1 |
10 |
11 |
100 |
101 |
110 |
111 |
八进制 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
十六进制 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
十进制 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
二进制 |
1000 |
1001 |
1010 |
1011 |
1100 |
1101 |
1110 |
1111 |
八进制 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
十六进制 |
8 |
9 |
A |
B |
C |
D |
E |
F |
十进制的数字在我们日常生活中普遍使用,然而在计算机内部,数字均以二进制形式表示和存放。引例:
(1)将任意进制的数转换为十进制数:
将这个数按照引例中的方法展开。注意底数使用的是该进制的基。
使用以上的方法,我们再来看两个例子:
(23E)16= 2×162+ 3×161+ 14×160=(574)10
(111)2= 1×22+1×21+1×20= 23-1 = (7)10
(2)将十进制数转换成任意进制数
十进制数转换成二进制数的规则为:将十进制的数字除以2,得到的商数继续除以2,直到商为0,然后将各次相除所得的余数从后往前排列,就得到该十进制数转换成的对应的二进制数。例如,将十进制数13转换成二进制数的过程如下:
2 | 1 3
2 | 6 …………1
2 | 3 …………0
2 | 1 …………1
0 …………1
所得的余数从后往前排列,得到二进制数1101,与表1中的一致。
同理,可以得出将十进制数转换为任意进制数的规则。例如,将十进制数13转换成八进制数的过程如下:
8 | 1 3
8 | 1 …………5
0 …………1
所得的余数从后往前排列,得到二进制数15,与表1中的一致。
(3)二进制与八进制、十六进制之间的转换
从表1中可以看出,每个八进制数的单个数字都可以用三位二进制数来表示,最大的八进制单个数字7等于最大的三位二进制111,最小的八进制单个数字0等于最小的三位二进制000。因此,每个八进制数的单个数字都可以用三位二进制数字来表示,即23=8。同样,每个十六进制数的单个数字都可以用四位二进制数来表示,即24=16。
例如,将八进制数13转换成二进制数的过程如下:
(1 3)8= (001 011)2
从以上的转换过程看出,将每个八进制数字转换成了三位二进制数字,1转换成001,3转换成011,因此八进制13对应的二进制数字为1011。
现举例说明将十六进制数数E3转换成二进制数的过程:
(E 3)16= (1110 0011)2
从表1可以看出,十六进制数字E等于二进制的1110,3等于二进制的0011,于是十六进制数字E3等于二进制数字11100011。
反过来,将二进制转换成八进制、十六进制,只需将从右边起的每三位或者每四位二进制数转换成对应的八进制数或十六进制数。
进制的常见错误:
1. 八进制数据中出现8,甚至是9.
2. 十六进制中,把15当成一个字符(实际上应该是f)。
2、整型常量
(1)十进制整型常量由一串连续的0~9数字组成。如:0、120、365、-12等。
(2)八进制整型常量以数字0开头,其中的数字为0~7。如:0112(十进制74)、0123(十进制83)、077(十进制63)等。
(3)十六进制整型常量以0x(数字0和字母x)或0X开头,其中的数字可以是0~9、a~f或A~F中的数字或英文字母。如:0x11(十进制17)、0xa5(十进制165)、0X5a(十进制90)等。
整型常量又分为短整型(short int)、基本整型(int)、长整型(long int)和无符号整型(unsigned)等几类。
例1:以下选项中可作为C语言合法整数的是
A) 10110B B) 0386 C) 0Xffa D) x2a2
分析:本题答案为C。
选项(A)不是C语言中三种整型常量之一。
选项(B)不是合法的八进制整型常量,因为八进制整型常量中不可能出现“8”字符。
选项(D)中x2a2前加上“0”就是一个合法的十六进制整型常量。
3、整型变量
整型变量是用于存放整型值的变量。对应于整型常量,整型变量也可分为短整型(short int)、基本整型(int)、长整型(long int)和无符号整型(unsigned)四种。
定义基本整型变量用关键字int,形式如下:
int i;
int类型所占据的字节长度因不同类型的机器或编译器而有所不同:
如果使用VC++6.0,则会为int型变量分配4个字节长度的存储单元。我们使用的将是这种情况。
如图1所示。图中表示对定义的int型整型变量i分配了四个字节的存储单元,这个存储单元的名字为i,里面的内容不确定。
图1 计算机系统为整型变量i分配的内存空间
当对变量i赋值时,这个值就存储在这个存储单元中。
例如,执行了赋值语句:
i=6;
则变量i的存储单元变为如图2所示的情况。
00000000 |
00000000 |
00000000 |
00000110 |
图2 十进制整数6存放在变量i的内存空间中的形式
正如读者所知,在计算机中实际上是以二进制形式存储数据的,所以在变量i的存储单元中存放的是四个字节的二进制数00000000 00000000 00000000 00000110(十进制6)。
C语言中规定,在定义变量的同时给变量赋初值,称为变量初始化。例如:
main( )
{ int a=2,b=3,c=4;
……
}
表2 不同类型的整型数在内存中所占用的字节数和数值范围
数据类型 |
关键字 |
占用的字节数 |
数值范围 |
短整型 |
[signed] short [int] |
2 |
-32768~32767 |
无符号短整型 |
unsigned short [int] |
2 |
0~65535 |
基本整型 |
[signed] int |
4 |
-2147483648~2147483647 |
无符号整型 |
unsigned [int] |
4 |
0~4294967295 |
长整型 |
[signed] long [int] |
4 |
-2147483648~2147483647 |
无符号长整型 |
unsigned long [int] |
4 |
0~4294967295 |
说明:
1) 如果要表示一个长整型常量,则应该在对应的整型常量后面加上一个字母后缀l(L的小写)或者是L。如0L、110L、123L等。这是因为如果不加上L(或l),则表明这个整型常量为基本整型常量,在内存中占两个字节的存储单元,而加上之后,则表明为长整型常量,在内存中占四个字节存储单元。
2)无论是短整型还是长整型常量,C语言系统都默认为是有符号整数。无符号整数在数字的后面加上一个字母后缀u或者是U。若是长整型无符号整型常量,则应该加后缀lu或者是LU。
例2:以下选项中不属于C语言的类型的是
A) signed short int B) unsigned long int
C) unsigned int D) long short
分析:根据表2可知,正确答案为D。
4、整数在内存中的存储形式
在计算机内存中最小存储单位称为“位(bit)”。每一个位中或者存放0,或者存放1,因此称为二进制位。一个字节(Byte)有8个二进制位。沿用惯例,把最右边一位称为最低位,把最左边一位称为最高位。在C语言中,对于有符号型整数,将最高位作为符号位,当最高位为0时表示正整数,当最高位为1时表示负整数。
下面介绍整数的存储形式。
注意:计算机中(或者说内存中)的数据都以它对应的补码形式存在。
上一篇:C 环境设置(转自菜鸟教程)
下一篇:(二)启动代码分析 01