1、整数类型
1.1 类型
类型 | 位数 |
---|---|
short(或short int) | 16位 |
int | 16位或32位 |
long (或long int) | 32位 |
long long(或long long int) | 64位 |
注意:
(1)如果在long类型等于int类型的系统中编写代码,当确实需要32位整数是,应使用long类型,以便使程序移植到int类型为16位的机器上后仍然可以正常工作。
(2)通常,数字常量以int类型存储,如果使用1000000这样的数字int类型不能表示时,编译器会视其为long int类型,如果仍然不够,会视其为long long int类型。
(3)如果希望把一个数字常量作为long类型对待,可以使用‘l’或‘L’后缀。使用’L’后缀是更好的选择,因为‘l’与数字1很相近。
(4)与之类似,可以使用‘ll’或者‘LL’后缀标识long long类型。
1.2 数制
数制 | 表示方法 |
---|---|
八进制 | 前缀‘0’ |
十进制 | 无前缀 |
十六进制 | 前缀‘0x’或者‘0X’ |
这种使用不同数制系统的选择是为了方便而提供的,它并不影响数字的存储。无论16、020、0x10,计算机内部都是使用二进制编码进行存储。
2、字符类型
表示方法 | 例子 |
---|---|
单引号 | char ch = ‘A’; |
ASCII码 | char ch = 65; |
转义序列 | char ch = ‘\n’; |
反斜杠 +数字 | char ch = ‘\020’; |
注意:
(1)上述‘反斜杠 +数字’表示方法中,数字为八进制或者十六进制,如果没有用‘x’前缀,则为八进制,
char ch1 = '\020';
char ch2 = '\20';
char ch3 = '\x10';
所以上述三个例子效果相同。
(2)C语言将字符常量视为int类型存储。
char grade = 65; \*对于ASCII,这是可以的;但这是一种不好的编程风格*\
char grade2 = 'A'; \*与上一条有类似的效果*\
char grade = 'FATE';
printf("%c", grade); //将打印出‘E’,因为C将这四个独立的8位
//ASCII码存储在一个32位的单元中。所以如果
//把这个字符常量赋给一个char变量,那么只有
//最后8位会起作用。
(3)如果再转义序列和其对应的ASCII码之间做出选择,应该使用转义序列,因为转义字符更容易记忆,而且移植性更好。
(4)当需要使用数值编码时,使用‘\032’而不是032。首先,‘\032’能更清晰的表达程序员表示一个字符编码的意图;其次,‘\032’这样的转义序列可以嵌入到C字符串中,比如字符串“hello!\007\n”中就嵌入了‘\007’。
3、浮点数类型
3.1 浮点类型
float:系统的基本浮点类型。至少能精确表示6位有效数字。
double:范围(可能)更大的浮点类型。能表示比float类型更多的有效数字以及更大的指数。
long double:范围(可能)更大的浮点类型。能表示比double类型更多的有效数字以及更大的指数。
3.2 表示方法
float a = -1.34E-12; //e或者E表示10的指数
float b = 2.23e21;
float c = 0xa.1fp10; //p或者P表示2的指数(十六进制表示法)
4、复数和虚数类型(用的不多,省略)
注意:
char类型肯定是1字节,因为C把char类型的长度定义为1个字节。所以在char类型长为16位,double类型长为64位的系统中,sizeof将报告double类型有4字节长。