C 语言基础教程(我的C之旅开始了)[五]
12. 基本数据类型:整型(下)
1. 输出各种整数类型的变量 输出不同类型的整数,需要使用不用的格式限定符。输出 unsigned int 类型的整数,要用 %u 。输出 long ,要用 %ld;如果要以十六进制或者八进制形式输出,那就用 %lx(或者%lX)或者 %lo。注意:虽然整数常量的后缀使用大写或者小写英文字母都没关系,但是它们格式限定符必须使用小写!如果我们要输出 short 类型的整数,可以在 %d 中间加上前缀 h,也就是%hd;同理,%ho 和 %hx(或者 %hX )分别表示以八进制或十六进制形式输出。前缀 h 和 l 可以和 u 组合,表示输出无符号整数。例如:%lu 表示输出 unsigned long 类型的整数;%hu 表示输出unsigned short类型的整数。如果您的编译器支持C99,可以使用 %lld 和 %llu 分别表示输出 long long 和 unsigned long long 。下面我们来看一个输出各种类型整数的程序: #include <stdio.h> int main(void) printf("un = %u and not %d\n", un, un); printf("Press ENTER to quit..."); 使用 Dev-C++ 编译运行这个程序输出结果如下: un = 3000000000 and not -1294967296 这个程序表明,错误使用格式限定符会导致意想不到的输出。首先,错误使用 %d 来做无符号整型变量 un 的格式限定符,导致输出的是负数。这是因为我的计算机使用相同的二进制形式来表示 3000000000 和 -129496296 ,而计算机只认识二进制。所以,如果我们使用 %u 告诉 printf 输出无符号整数,输出的就是 3000000000;如果我们误用了 %d,那么输出的就是一个负数。不过,如果我们把代码中的 3000000000 改成 96 的话,输出就不会出现异常。因为 96 没有超出 int 的表示范围。 2. 整数溢出 首先请看以下程序: #include <stdio.h> int main(void) printf("%d %d %d %d\n", i, i+1, j, j-1); printf("Press ENTER to quit..."); 使用 Dev-C++ 编译运行这个程序输出结果如下: 2147483647 -2147483648 -2147483648 2147483647 这个程序中,i+1 是负数,j-1 是正数,k+1 是 0,l-1 是 4294967295 。这是因为加减运算过后,它们的值超出了它们对应的那种整数类型的表示范围,我们把这种现象称为溢出。 |
13. 标识符命名规则 |
1. 长度限制 C89 规定,编译器至少应该能够处理 31 个字符(包括 31)以内的内部标识符(internal identifier);而对于外部标识符(external identifier),编译器至少应该能够处理 6 个字符(包括 6)以内的外部标识符。所谓标识符,是指我们为变量(variable)、宏(macro),或者函数(function)等等取的名字。例如 int num; 这个语句中的 num 就是一个标识符。 2. 可用字符和组合规则 标准规定,标识符只能由大小写英文字母,下划线(_),以及阿拉伯数字组成。标识符的第一个字符必须是大小写英文字母或者下划线,而不能是数字。 合法命名 非法命名 操作系统和 C 语言标准库里的标识符一般以下划线开头,这是约定俗成的。因此,我们应该避免使用下划线作为我们自己定义的标识符的开头。 |