【发布时间】:2021-12-18 16:07:04
【问题描述】:
我需要帮助解决这个问题,所以如果有人有类似的问题,它会帮助我。
这是我的代码:
char c=0xAB;
printf("01:%x\n", c<<2);
printf("02:%x\n", c<<=2);
printf("03:%x\n", c<<=2);
程序打印的原因:
01:fffffeac
02:ffffffac
03:ffffffb0
我期望打印出来的,也就是我在纸上得到的是:
01:fffffeac
02:fffffeac
03:fffffab0
我显然意识到我不知道运营商<<=在做什么,我以为c = c << 2。
如果有人能澄清这一点,我将不胜感激。
【问题讨论】:
-
我查看了它,但对我没有帮助:(
-
我们如何获得第二个 printf: ffffffac ?那么第一次打印和第二次打印有什么不同呢?
-
我相信这与第一个被提升为
int并打印为int,第二个被提升为int(用于轮班)然后返回@ 987654329@(存储在c)然后再次返回int进行打印。 -
是的,很有可能,现在我也注意到了
-
从技术上讲,您的代码中有 undefined behavior:格式说明符
%x用于 unsigned 整数,而您的操作结果将是有符号整数。格式说明符和参数类型之间的这种不匹配是 UB。