为什么输出为0.0000?[duplicate]

tkclm6bt  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(134)

此问题在此处已有答案

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作为带符号字符值的格式说明符。

bgibtngc

bgibtngc1#

如果你想打印一个整型变量中的值,就像它是浮点数一样,你必须写一个显式转换。

#include <stdio.h>
int main()
{
    signed char ch;
    ch = 128;
    printf("%f\n", (double)ch);
    return 0;
}

在调用 * 大多数 * 带有doublefloat参数的函数时,编译器会为你插入这个类型转换,但是它不会为printf这样做,因为printf的参数列表没有声明。
由于您知道该值是整数,因此也可以自己写出小数部分:

#include <stdio.h>
int main()
{
    signed char ch;
    ch = 128;
    printf("%d.000000\n", ch);
    return 0;
}

将打印与第一个示例相同的内容。

wpx232ag

wpx232ag2#

要打印signed char的值,您需要使用%d%f id以使用floatdouble类型。

#include <stdio.h>
int main()
{
    signed char ch;
    ch = 128;
    printf("%d\n", ch);
    return 0;
}

https://godbolt.org/z/5816GvPWd
当您设置8位整数的最后一位时(假设CHAR_短距== 8),它将输出-128,并且系统使用二进制补码整数
将128分配给8位signed char是实现定义的,因为128不能容纳在8位整数中。

相关问题