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

2020-02-01 16:14发布

谁能告诉我cmd =(unsigned char)-1 ;  cmd的值为多大? cmd的定义类型为unsigned char
也请求高人,讲解一些与强制类型转换的知识。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
15条回答
cqfeiyuxmj
1楼-- · 2020-02-01 16:45
cmd=0xFF   
snoopyzz
2楼-- · 2020-02-01 21:22
2L正解,显然是0xff
feixiang1990
3楼-- · 2020-02-01 23:49
 精彩回答 2  元偷偷看……
snoopyzz
4楼-- · 2020-02-02 03:38
feixiang1990 发表于 2013-2-2 11:22
有个问题啊;
float f= 5.75;
那么(int)f 是多少呢?

(int)f = 5;
(unsigned char)(-2) = 0xfe
yoz
5楼-- · 2020-02-02 09:06
本帖最后由 yoz 于 2013-2-2 11:53 编辑

(编辑原因:补回我错误的思路,提出疑问,也消除话没说清楚引起的误会)
5.75就是101.11,也就是1.0111*2^10,对应应该是0 10000001 0111 0000 0000 0000 0000 000,对应的int应该是1085800448
(但是读出却是0,于是我做了实验)
/********************/
#include <stdio.h>

int main(void)
{
    float a = 5.75;
    int b;
    b = (int)a;
    printf("%d " , b);
    printf("%d " , a);//我故意试验两种方法的,在工作中不可能做这么2的事
    return 0;
}
/********************/
才明白
(int)5.75==5

float a=5.75;
printf("%d ",a);
会输出0
我之前对c理解的还是不到位
现在还是有疑惑,为什么用%d会输出0而不是1085800448?难道是大小端?我还不明白
snoopyzz
6楼-- · 2020-02-02 14:57
yoz 发表于 2013-2-2 11:28
刚才说错了,(int)5.75==0

float a=5.75;


float a=5.75;
printf("%d ", (int)a);

肯定结果是5


你输出0是因为没加强制类型转换

效果等同于  *(int*)&a, 而不是(int)a

一周热门 更多>