C语言强制类型转换的疑惑

2020-02-01 16:14发布

谁能告诉我cmd =(unsigned char)-1 ;  cmd的值为多大? cmd的定义类型为unsigned char
也请求高人,讲解一些与强制类型转换的知识。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
16条回答
takashiki
2020-02-03 17:46
yoz 发表于 2013-2-3 10:22
我又做了一个实验,看来float转换为int也因机器而已,在windows的vc6上,以下程序测试结果是
5.000000
#inc ...

int和float/double之间的转换是会调用转换函数的,因为类型不兼容。
char、short、int、long、long long/int64以及它们的unsigned版本转换是不需要调用转换函数的,因为类型是兼容的。
同样,C++专门有转换函数的概念,只不过并不以函数的形式表现,而是以操作符重载的形式体现。

至于你6楼所说的%d会输出0而不是1085800448是因为变量存储的地址不一致所引起的,而不是大小端。float会使用FPU,很遗憾,%d不访问FPU,它所访问的寄存器根本就不是float所使用的寄存器,所以输出一个无法确定的值。孟子曰:以若所为(float所在的FPU寄存器),求若所欲(%d所用的CPU寄存器),犹缘木而求鱼也。

一周热门 更多>