C语言中的基本整型数据类型
C语言中的基本整型数据类型
整型家族包括字符、短整型、整型、长整型,它们都分为有符号和无符号两种版本
整型值相互之间的大小的规则:
长整型至少应该和整型一样长,而整型至少应该和短整型一样长
一般情况下各种类型在32、64位机上的大小
long,unsigned long pointer为机器全字长,其实也就是这几种类型的大小和CPU的位数是一样的。
下面的程序是在X86架构环境上,使用gcc version 4.7.2 20121109 (Red Hat 4.7.2-8) (GCC)编译得到的
|
|
运行结果
|
|
整型字面值(整型常量)
字面值这个术语是字面值常量的缩写——这是一种实体,指定了自身的值,并且不允许发生改变。
当程序内出现整型常量时,它是属于整型家族类型中的哪一种?答案取决于常量是如何书写的,可以在有些常量的后面添加一个后缀来改变缺省规则。在整数常量后面添加L或l,可以使这个整数被解释为long整型值,字符U或u则用于把数值指定为unsigned 整型值,如果一个常量后面添加这两个字符中的各一个,那么它就被解释为unsigned long整型值。对于字符常量。它们的类型总是int。不能再它们后面添加unsigned或者long后缀
printf格式化的原则
C语言一般默认整型常量(字符常量/整型常量)类型为int,
如果使用格式字符%llu,printf会认为要输出的这个值的大小为8字节,所以如果对应的参数如果为0x0的话则有可能打印出乱七八糟的东西(因为它读了8个字节而不是4个字节)
另外printf打印整型变量时,打印的是有符号还是无符号取决于格式字符,与实际传入的参数类型及符号无关。
例如
所以请谨记使用printf打印变量的值与该变量的符号和变量本身无关,即使强转也不行!是有printf的格式字符决定的,应选择对应正确的格式字符