【发布时间】:2010-10-22 20:31:07
【问题描述】:
所以我只是在修改 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;
}
如果我将 int 更改为无符号,结果相同:
#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;
}
【问题讨论】:
-
您确定您的 int 类型只有 16 位宽吗?
-
请注意,像
0b1111这样的二进制常量语法不是 ISO 标准 C。 -
使用
uint16_t/int16_t而不是int,这样您就可以确保填写整个值,包括符号位。 -
你为什么不直接做
signed int iNumber = -1? -
@Donotalo - 我的错误,我的废代码没有意义,所以当我将它粘贴到帖子中时,我“清理”了它,所以它可读/有意义,但我显然忽略了一些“次要的” '详细信息:)