提问人:Rana Zeeshan 提问时间:2/6/2023 最后编辑:Zakys98Rana Zeeshan 更新时间:2/7/2023 访问量:132
有符号多头到浮动,然后有符号空头 [关闭]
Signed long to float and then to signed short [closed]
问:
这是我的代码:
#include <stdio.h>
typedef signed long int32_t;
typedef signed short int16_t;
int main() {
int32_t var1 = 1200;
int16_t var2;
var2 = (int16_t)((float)var1/1000.0);
printf("Hello World: %d", var2); // prints 1 should print 1.2
return 0;
}
在 C 中的数据类型之间进行类型转换。因此,我试图在有符号的短整型中将“var2”的值获取为 1.2,但我得到了值 1。我必须使用 16 位寄存器,而不能使用 32 位浮点数。
答:
1赞
0___________
2/6/2023
#1
printf("Hello World: %d", var2); // prints 1 should print 1.2
不,它不应该。
(float)var1 converts
自。float
(float)var1/ 1000.0
- 结果 1.2(int16_t)1.2
- 转换为整数,结果为1
顺便说一句,您不能使用格式打印。要 100% 正确,您应该使用格式来打印短整数。1.2
%d
%hd
强制转换不会二进制复制,仅在类型之间进行转换
评论
0赞
Andrew
2/6/2023
几个错误/“做不到”的答案,然后就关闭了?糟糕的形式!
1赞
Lam
2/6/2023
#2
var2 是“有符号短整型”类型,它只能包含整数值。如果为其分配十进制数,则会截断十进制部分 (0.2),而仅保留整数部分 (1)。我希望我能有所帮助。有好的一天!
1赞
stark
2/6/2023
#3
您已经在 var1 的 16 位 int 中拥有它。您的表示形式称为“缩放整数”。只需在需要打印值时进行转换即可。
printf("%f\n", (float)(var1/1000.0));
评论
%f
int
%d
int
1.2
int16_t
long