C语言中的截断与整型提升
C语言中的截断与整型提升 我们首先来看一段代码: # include <stdio.h> # include <stdlib.h> union Un //--联合体 { char c ; int i ; } ; int main ( ) { //联合变量的定义 union Un un = { 0 } ; //计算联合变量的大小 printf ( "%d\n" , sizeof ( un ) ) ; //--结果为4,联合体按照最大的变量开辟空间 // 下面输出的结果是一样的吗? un . c = 129 ; // 10000001 printf ( "%d\n" , un . c ) ; //-127 printf ( "%d\n" , un . i ) ; //129 system ( "pause\n" ) ; return 0 ; } 猜猜结果吧! 来看看真实的结果: 这是为什么呢?这就涉及到了C语言中的截断和整型提升。 截断: 在c语言中进行变量赋值的时候, 如果将字节多的数据类型赋给一个字节少的数据类型,会发生“截断”。 发生这种情况的原因是:在赋值过程中只将占字节较长的变量的低位赋给占字节较短的变量。 整型提升: 整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整形首先要提升为 int类型 ,如果int类型不足以表示则要提升为 unsigned int类型