【发布时间】:2018-03-17 19:07:01
【问题描述】:
我是 c 编程的新手,我正在尝试更多地了解位,二进制 e.c.t
例如,我有三个 int 变量 m1 =255 或 11111111 二进制; m2 = 255 或 11111111 二进制,m3 = 255 或 11111111 二进制和 m4 = 0 或 00000000。我试图将所有主题放在单个 int 变量 temp 中。像这样的东西(11111111 11111111 11111111 00000000) 这是我拥有的一段代码:
int x1;
unsigned char x2;
unsigned char x3;
unsigned char x4;
int temp;
x1 = x1|m1;
printf("x1:%d\n", x1);
x2 = x2|m2;
printf("x2:%d\n", x2);
temp = x1<<8;
printf("temp:%d\n", temp);
temp = temp|x2;
printf("temp:%d\n", temp);
x3 = x3|m3;
printf("x3:%d\n", x3);
temp = temp<<8;
printf("temp:%d\n", temp);
temp = temp|x3;
printf("temp:%d\n", temp);
x4 = x4|m4;
printf("x4:%d\n", x4);
temp = temp<<8;
printf("temp:%d\n", x1);
temp = temp|x4;
printf("%d\n", temp);
我在这里使用左移和 OR 运算符。但是我得到了一些奇怪的输出。 (我打印了每一步以找出问题所在)。
我得到了下一个输出:
x1:255
x2:255
温度:65280
温度:65535
x3:255
温度:16776960
温度:16777215
x4:0
温度:-256
温度:-256
一切都很好,直到温度变为-256,我不知道为什么。 我很感激任何帮助!谢谢!
【问题讨论】:
-
您似乎将
unsigned char打印为整数("%d"说明符);您是否尝试过正确的说明符,例如"%c"或"%u"? -
x1 = x1|m1;你在声明后还没有初始化 x1。你在哪里声明了 m1? -
请贴出真实代码。无论如何,
m1甚至都没有声明,而您使用x1的未初始化值 -
@Evert
%d是unsigned char的正确格式说明符(假设我们使用的是 8 位字符的系统)。这是因为默认参数提升将unsigned char提升为int