此问题在此处已有答案:
Why does printf("%f",0); give undefined behavior?(共10个答案)
4天前关闭。
#include <stdio.h>
int main()
{
signed char ch;
ch = 128;
printf("%f", ch);
return 0;
}
有谁能解释一下为什么它每次都打印0. 000吗?
我尝试将%f
作为带符号字符值的格式说明符。
此问题在此处已有答案:
Why does printf("%f",0); give undefined behavior?(共10个答案)
4天前关闭。
#include <stdio.h>
int main()
{
signed char ch;
ch = 128;
printf("%f", ch);
return 0;
}
有谁能解释一下为什么它每次都打印0. 000吗?
我尝试将%f
作为带符号字符值的格式说明符。
2条答案
按热度按时间bgibtngc1#
如果你想打印一个整型变量中的值,就像它是浮点数一样,你必须写一个显式转换。
在调用 * 大多数 * 带有
double
或float
参数的函数时,编译器会为你插入这个类型转换,但是它不会为printf
这样做,因为printf的参数列表没有声明。由于您知道该值是整数,因此也可以自己写出小数部分:
将打印与第一个示例相同的内容。
wpx232ag2#
要打印
signed char
的值,您需要使用%d
。%f
id以使用float
和double
类型。https://godbolt.org/z/5816GvPWd
当您设置8位整数的最后一位时(假设CHAR_短距== 8),它将输出
-128
,并且系统使用二进制补码整数将128分配给8位
signed char
是实现定义的,因为128不能容纳在8位整数中。