c - 通过 printf 在 c 中打印负值

标签 c

我正在运行一个用于学习 C 的测试代码。但是我对十六进制负数的表示很好奇,为此我编写了一个测试代码。令我惊讶的是,通过运行该测试代码,我只收到零

    union unin
    {
        char chrArray[4];
        float flotVal;
    }uninObj;

    uninObj.flotVal = -25;

    printf("%x %x %x %x",uninObj.chrArray[0], uninObj.chrArray[1], /
           uninObj.chrArray[2], uninObj.chrArray[3]);
    printf("\n Float in hex: %x",uninObj.flotVal);
    return 0;

最佳答案

传递 float给期望 unsigned int 的说明符是未定义的行为

此外,unsigned int预计 %x不保证与 float 大小相同.所以骗局的企图printf这种方式可能“有效”,也可能无效。

无论如何,对于像 printf 这样的可变参数函数编译器将提升类型为 float 的参数至 double ,所以这可能是你(和我)得到 0 的原因输出。

在我的系统上
sizeof(double)8 .
sizeof(unsigned int)4 .

如果您查看 union 的那部分的字节输出, 前两个是 0 .因此将 8 个字节传递给函数而不是 %x 预期的 4 个字节,数据以 %x 的方式对齐得到四个 0值字节。

关于c - 通过 printf 在 c 中打印负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56779250/

相关文章:

c - Linux/POSIX 等同于 Win32 的 CreateEvent、SetEvent、WaitForSingleObject

C - pthread 段错误 11

php - 在 PHP exec 中使用 mktime 运行 C 代码

iphone - Objective-C : How does 7 - 1 = 3?

c - valgrind 条件跳转或移动错误

c - C链表中的内存泄漏

c++ - 用于 C++ 的嵌入式调试器

C:计算字数(需要帮助修复)

c - 尝试打开文件时出现段错误(核心已转储)

c - 什么是强指针和弱指针