首页 > 代码库 > C primer plus 学习随笔

C primer plus 学习随笔

数据类型

int类型

   printf()输出八进制整数时,用%o代替%d,输出十六进制时,用%x。

   %#o、%#x和%#X分别生成0、0x、0X前缀。

1 #include <stdio.h>
2 int main(void)
3 {
4     int x = 100;
5     printf("dec = %d; octal = %o; hex = %x;\n", x, x, x);
6     printf("dec = %#d; octal = %#o; hex = %#x;\n", x, x, x);
7     return 0;8 }

 

   输出:

     dec=100;octal=144;hex=64;

              dec=100;octal=0144;hex=0x64;

其他整数类型

  • short int 类型(或者简写为short类型):可能占用比int类型更少的存储空间,用于仅需小数值的场合以节省空间。同int类型一样,short类型是一种有符号类型。
  • long int 类型(或者简写为long类型):可能占用比int类型更多的存储空间,用于使用大数值的场合。同int类型一样,long类型是一种有符号类型。
  • long long int 类型(或者简写为long long类型):可能占用比long类型更多的存储空间,用于使用更大数值的场合。同int类型一样,long long类型是一种有符号类型。
  • unsigned int类型(或者简写为unsigned类型):用于只使用非负值的场合。这种类型同有符号类型的表示范围不同,无符号数可以表示更大的数值。
  • unsigned long int(简写为unsigned long)和unsigned short int(简写为unsigned short)类型。
  • 关键字signed可以和任何有符号类型一起使用,它使数据的类型更加明确。

  为什么说long和short类型“可能”占用比int类型更多或者更少的存储空间呢?因为C仅保证short类型不会比int类型长,并且long类型不会比int类型短。这样做是为了适应不同的机器。

  当使用int类型不能表示一个数而使用long类型可以做到时,使用long类型。但是,在long类型大于int类型的系统中,使用long类型会减慢计算,所以没有必要时不要使用long类型。如果是在long类型等于int类型的系统中编写代码,当确实需要32位整数时,应使用long类型(而不是int类型),以便使程序被移植到16位机器上后仍然可以正常工作。

打印short、long、long long和unsigned类型数

  要打印unsigned int数字,可以使用%u符号。打印long数值,可以使用%ld格式说明符。如果系统中int和long类型具有同样的长度,使用%d就可以打印long数值,但是这会给程序移植到其他系统(这两种数据类型的长度不一样的系统)带来麻烦,所以建议使用%ld打印long数值。在x和o符号前也可以使用l前缀,因此%lx表示以十六进制格式打印长整数,%lo表示以八进制格式打印长整数。请注意,尽管在C中常量后缀可以使用大写和小写,但格式说明符只能使用小写字母。

  对short类型可以使用h前缀,因此%hd表示以十进制显示short整数,%ho表示以八进制显示short整数。h和l前缀都可以同u结合使用以表示无符号类型。比如,%lu表示打印unsigned long类型。

  使用%c说明打印一个字符。

float和double类型

  float类型必须至少能表示6位有效数字,取值范围至少为10-37到10+37double类型和float类型具有相同的最小取值范围要求,但它必须至少能表示10位有效数字。

  默认情况下,编译器将浮点常量当作double类型。

  printf()函数使用%f格式说明符打印十进制记数法的float和double数字,用%e打印指数记数法的数字。

print()函数什么时候真正把输出传送给屏幕?

  首先,printf()语句将输出传递给一个被称为缓冲区(buffer)的中介存储区域。缓冲区中的内容再不断地被传递给屏幕。标准C规定在以下几种情况下将缓冲区内容传给屏幕:缓冲区满的时候、遇到换行符的时候以及需要输入的时候。将缓冲区内容传送给屏幕活文件称为刷新缓冲区(flushing the buffer)。