详解C语言的类型转换
作者:网络转载 发布时间:[ 2013/6/19 10:04:35 ] 推荐标签:
(5)无符号整数
将一个unsigned 型数据赋给一个占据同样长度存储单元的整型变量时(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照赋,内部的存储方式不变,但外部值却可能改变。
将一个非unsigned整型数据赋给长度相同的unsigned型变量时, 内部存储形式不变,但外部表示时总是无符号的。
/*例:赋值运算符举例 */
main()
{
unsigned a,b;
int i,j;
a=65535;
i=-1;
j=a;
b=i;
printf("(unsigned)%u→(int)%d
",a,j);
printf("(int)%d→(unsigned)%u
",i,b);
}
运行结果为:
计算机中数据用补码表示,int型量高位是符号位,为1时表示负值,为0时表示正值。如果一个无符号数的值小于32768则高位为0,赋给 int型变量后、得到正值。如果无符号数大于等于32768,则高位为1, 赋给整型变量后得到一个负整数值。反之,当一个负整数赋给unsigned 型变量时,得到的无符号值是一个大于32768的值。(这里假定int型占两个字节)
C语言这种赋值时的类型转换形式可能会使人感到不精密和不严格,因为不管表达式的值怎样,系统都自动将其转为赋值运算符左部变量的类型。
而转变后数据可能有所不同,在不加注意时可能带来错误。 这确实是个缺点,也遭到许多人们批评。但不应忘记的是:C面言初是为了替代汇编语言而设计的,所以类型变换比较随意。当然, 用强制类型转换是一个好习惯,这样,至少从程序上可以看出想干什么。
3、强制类型转换
可以利用强制类型转换运算符将一个表达式转换成所需类型:
例如:
(double)a (将a转换成double类型)
(int)(x+y) (将x+y的值转换成整型)
(float)(5%3) (将5%3的值转换成float型)
(int)(1.5+2.3) = 3
(int)1.5+2.3=?
对于从高到低的强制转换,实质上是一个截断的操作,只把低端需要的部分保留,其余的部分直接扔掉了。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11