数据类型 | 数据类型符 | 占用字节数 | 数值范围 |
整型 | int | 2(或4) | 同短整型(或长整型) |
短整型 | short | 2 | -32768~32767 |
长整型 | long | 4 | -2的31次方~2的31次方-1 |
无符号整型 | unsigned [int] | 2(或4) | 同无符号短整型(长整型) |
无符号短整型 | unsigned short | 2 | 0~65535(0~2的16次方-1) |
无符号长整型 | unsigned long | 4 | 0~2的32次方-1 |
单精度实型 | float | 4 | -10的38次方~10的38次方 |
双精度实型 | double | 8 | -10的308次方~10的308次方 |
字符型 | char | 1 | -128~127 |
一 在C语言中,如果执行一个运算同时有无符号数和带符号整数参加,那么C编译器会隐含地将带符号整数强制类型转换为无符号数,因而会带来一些意想不到的结果。
二 C语言中的浮点数类型
当在int、float、double等类型之间进行强制类型转换时,程序将得到以下数值转换结果(假定int为32位)
- 从int转换为float时, 不会发生溢出,但可能有效数字被舍入。
- 从int或float转换为double时, 因为double的有效位数更多,故能保留精确值。
- 从double转换为float时,因为float表示范围更小,故可能发生溢出,此外,由于有效数位变少,故可能被舍入。
- 从float 或double转换为int时,因为int没有小数部分,所以数据可能会向0方向被截断。 例如1.999被转换为1, -1.9999被转换为-1. 此外,由于int的表示范围更小,故可能发生溢出。将大的浮点数转换为整数可能会导致程序错误。
看一个例子: 假定变量i、f、d的类型分别是int、 float、double,判断下列每个C语言关系表达式在32位机器上运行时是否永真。
A i == (int)(float)iB (d+f) - d ==f
分析: A 不是, int精度比float高,当i转换为float再转换为int时,有效数字可能丢失。
B 不是, 例如 当d=1.79*10的308次方,f=1.0时, 左边为0, 因为d+f时f 需向d对阶, 对阶后f的尾数有效数位被舍去而变为0, 故d+f仍然等于d, 再减去d后结果为0, 而右边为1.0 。
声明:本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。