C语言中的整型数据类型转换以及格式化输出问题.docx
C语言中的整型数据类型转换以及格式化输出问题
先附上两张图片
Printf()函数的格式转换参数
各数据类型的长度和表示范围
首先我们来谈整型数据的转换问题,不同类型的整型数据所占的字节数不同,在转换时需要格外留心。
分为两种情况:
第一种情况为将所占字节大的类型数据转换为所占字节小的类型数据,这种情况下只需要截取合适位数的大字节的类型数据到小字节类型数据中即可,例如:unsigned short a=256;char b=a; 则b中的数据截取了a的低八位。
第二种情况为将所占字节小的类型数据转换为所占字节大的类型数据,这种情况下需要涉及到扩展问题,所谓扩展分为两种情况,当需要扩展的小类型数据为有符号数时,即将过小数据的最高位即符号位复制到扩展的位上,比如一个char类型的数据char a=128,二进制表则将其转换为整型数据b即int b=a,相应的b即为1…又或者一个char类型数据127,二进制表则将其转换为整型数据b相应的b即为0….当需扩展的小类型数据为无符号数时,扩展位为全部为0。
另外对于同等大小的不同数据类型之间转换,则是相应的二进制码全额复制。
下面我们来讨论%d和%u的格式化输出问题
我们都知道%d表示输出十进制有符号整数,然而很少有人会注意到%d表示的格式类型其实相当于int类型,即有符号整型数据,占用4个字节,最高位表示符号位,输出的范围在-2147483648到2147483647间。
当我们在用%d输出数据是需要注意类型间的转换问题的。
不同类型的整型数据所占的字