为什么在打印此int时会得到相同的值?

Pro*_*eur 5 c gcc

所以我只是在修补C并希望看看我是否可以将二进制值分配给整数并使用printf()函数输出有符号或无符号值.但是无论我得到相同的输出,我都认为与无符号相比,打印签名的价值只有一半.我正在使用Code :: blocks和GCC.

printf()是否忽略%i和%u并使用变量定义?

示例代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    signed int iNumber = 0b1111111111111111;
    printf("Signed Int : %i\n", iNumber);
    printf("Unsigned Int : %u\n", iNumber);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我将int更改为unsigned,结果相同:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    unsigned int iNumber = 0b1111111111111111;
    printf("Signed Int : %i\n", iNumber);
    printf("Unsigned Int : %u\n", iNumber);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mat*_*hen 6

我认为charCount应该是iNumber.两个程序都有未定义的行为,因为您使用了错误的转换说明符一次.

在实践中(对于大多数实现而言),printf依赖于您告诉它从堆栈弹出的内容; 这是必要的,因为它是一个可变参数函数. va_arg将类型作为第二个参数弹出

分配之前和之后的程序之间的位是相同的.所以printf用不同类型的指针指向相同的位.

你会得到相同的结果的原因%i%u是这样它解释为均为阳性说明符的最左边位未设置.

最后,您应该注意二进制文字(0b)是GCC扩展,而不是标准C.


Pup*_*ppy 3

因为对于正数,大多数平台上的二进制表示形式在有符号和无符号之间是相同的。