1、数据类型
C语言支持的数据类型如下:
2、常量
常量就是不同数据类型下的值。这里主要讲整型、实型和字符型常量。
(1)整型常量:用十进制、八进制和十六进制三种形式表示。
(1)实型常量:由整数部分和小数部分组成的,只有十进制方式。
(3)符号常量:用#define 宏定义(编译预处理命令),指定用一个符号名称(标识符)代表一个常量,符号名称就是符号常量。
(4)字符型常量(包括普通字符常量和转义字符常量):
——普通字符常量:用一对单引号括起来的一个普通字符。
如: 'a' 、 'A' 、 '3' 、'?'等。
——转义字符常量:以反斜杠符(\)开头,后跟字符的ASCII码值的字符序列。
常用转义字符常量如下:
(5)字符型常量(即字符串常量):用一对双引号括起来的字符序列。[注意:双引号括起来的字符序列可以包括普通字符和转义字符。此外,还要注意字符和字符串的存储空间区别,并举例说明。]
字符串常量后面多了一个'\0'字符。
3、变量
变量定义:其基本要素包括变量名、类型和值。
上述【...】是可以省略的部分。
变量定义示例如下:
int main()
{
int i,j; //定义两个整型变量,只要没有加unsigned,都是指有符号的
float f; //定义一个单精度实型变量
double d; //定义一个单精度实型变量
char c; //定义一个双精度实型变量
short s; //定义一个短整型变量
long l; //定义一个长整型变量
unsigned u; //定义一个无符号整型变量
return 0;
}
4、正负数存储
对于signed,上述数据类型的存储空间首位为符号位,0表示正,1表示负。此外,负数是以补码存储的。
例如:+1的int存储为1的原码:
00000000 00000001
-1的int存储为-1的补码:
——首先,-1的原码为:10000000 00000001;
——然后,-1的反码为:11111111 11111110; 【注:针对-1的原码,反转其符号位之外的所有位得到】
——最后,-1的补码为:11111111 11111110 + 00000000 00000001 = 11111111 11111111。【注:在-1的反码基础上+1,得到-1的补码】
5、进制转换
以二进制为纽带可以简化进制转换过程:
(1)二进制——>十进制
(2)十进制——>二进制
小数点左边除2原则:
55/2 = 27 余 1
27/2 = 13 余 1
13/2 = 6 余 1
6/2 = 3 余 0
3/2 = 1 余 1
1/2 = 0 余 1
直至0为止,将得到的余数进行倒排,得到110111。
小数点右边乘2原则:
0.25*2 = 0.5 取走小数点左边整数0,还剩0.5
0.5*2 = 1.0 取走小数点左边整数1,还剩0.0
0.0*2 =0.0 结束,将得到的整数进行顺排,得到01
因此,得到的二进制数为(110111.01)B。
(3)二进制——>八进制
由于八进制需要3位来表示,具体如下:
000——0
001——1
010——2
011——3
100——4
101——5
110——6
111——7
因此,可以对二进制首先进行3位补齐【用0来补】,然后再转换为八进制数。
如上(110111.01)B,小数点前面向左补齐,小数点后面向右补齐,得到(110111.010)B。
这样(110111.010)B的八进制表示为:(67.2)O。
(4)八进制——>二进制
也就是“二进制——>八进制”的逆过程:
将(67.2)O中的八进制位转换成相应的二进制位即可得到:(110111.010)B,然后删除无意义的0得到:(110111.01)B。
(5)二进制——>十六进制
由于十六进制需要4位来表示,具体如下:
0000——0
0001——1
0010——2
0011——3
0100——4
0101——5
0110——6
0111——7
1000——8
1001——9
1010——A,即10
1011——B,即11
1100——C,即12
1101——D,即13
1110——E,即14
1111——F,即15
因此,可以对二进制首先进行4位补齐【用0来补】,然后再转换为十六进制数。
如上(110111.01)B,小数点前面向左补齐,小数点后面向右补齐,得到(00110111.0100)B。
这样(00110111.0100)B的八进制表示为:(37.4)H。
(6)十六进制——>二进制
也就是“二进制——>十六进制”的逆过程:
将(37.4)H中的十六进制位转换成相应的二进制位即可得到:(00110111.0100)B,然后删除无意义的0得到:(110111.01)B。
(7)十进制、八进制和十六进制之间转换
可以借助二进制来实现,即上述(1)~(6)。