摘录来自
C Primer Plus 第6版 中文版
[美]史蒂芬·普拉达(Stephen Prata)
https://itunes.apple.com/WebObjects/MZStore.woa/wa/viewBook?id=0
此材料受版权保护。
3.4 C语言基本数据类型
3.4.1 int 类型
(1) 声明int变量--int + 变量名 + ;
以下皆为有效声明:
·int erns;
·int hogs, cows, goats;
(2)提供值的三种途径
·cow=12
·通过函数(如,scanf())获得值。
·初始化变量:初始化(initialize)变量就是为变量赋一个初始值。在C语言中,初始化可以直接在声明中完成。只需在变量名后面加上赋值运算符(=)和待赋给变量的值即可。
(3)打印int值
我们可以使用printf()函数打印int类型的值。%d指明了在一行中打印整数的位置。%d称为转换说明,他指明了printf()应使用什么格式来显示一个值。记住,使用printf()函数时,要确保转换说明的数量与待打印值的数量相等,因为编译器不会捕获这类型的错误。
(4)八进制和十六进制
C语言都假定整型常量是十进制数。然而,许多程序员很喜欢使用八进制和十六进制数,因为都是2的幂。在C语言中,用特定的前缀表示使用哪种进制。0x或0X前缀表示十六进制值,与此类似,0前缀表示八进制。要清楚,使用不同的进制数是为了方便,不会影响数被储存的方式,因为计算机内部都以二进制进行编码。
在C程序中,不同的进制要使用不同的转换说明。以十进制显示数字,使用%d;以八进制显示数字,使用%o;以十六进制显示数字,使用%x。
另外,要显示各进制数的前缀0、0x和0X,必须分别使用%#o、%#x、%#X。
#include <stdio.h>
int main()
{
int x=100;
printf("dec=%d;octal=%o;hex=%x\n",x,x,x);
printf("dec=%d;octal=%#o;hex=%#x\n",x,x,x);
return 0;
}
编译并运行该程序,输出如下:
dec = 100; octal = 144; hex = 64
dec = 100; octal = 0144; hex = 0x64
3.4.2 其他整数类型
·short 常用于较小数值的场合以节省空间,short是有符号类型。
·long 适用于较大数值的场合,long是有符号类型。
·long long 占用的储存空间可能比long多,适用于更大数值的场合。该类型至少占64位。long long是有符号类型。
·unsigned 只用于非负值的场合。这种类型与有符号类型表示的范围不同。(例如,16位unsigned int允许的取值范围是0~65535,而不是-32768~32767。)用于表示正负号的位现在用于表示另一个二进制位,所以无符号整型可以表示更大的数 。(在C90标准中,添加了unsigned long和unsigned short类型。C99标准又添加了unsigned long long。)
在任何有符号类型前面添加关键字signed,可强调使用有符号类型的意图。
(1)声明其他整数类型
其他整数类型的声明方式与int类型相同。
(2)整数溢出
#include <stdio.h>
int main(void)
{
int i = 2147483647;
unsigned int j = 4294967295;
printf("%d %d %d\n", i, i+1, i+2);
printf("%u %u %u\n", j, j+1, j+2);
return 0;
}
2147483647 -2147483648 -2147483647
4294967295 0 1