gpt4 book ai didi

c - 添加 0xff 对按位运算的影响

转载 作者:行者123 更新时间:2023-12-02 01:07:47 26 4
gpt4 key购买 nike

几个小时后我要参加 C 期末考试,我正在复习过去的考试,以确保我理解以前错过的问题。我有以下问题,我只是将其留空,因为我不知道答案,然后我继续前进,现在看着它,我不确定答案是什么……问题是;

signed short int c = 0xff00;
unsigned short int d, e;

c = c + '\xff';
d = c;
e = d >> 2;

printf("%4x, %4x, %4x\n",c,d,e);

我们被要求显示要打印的值是什么?这是让我失望的'xff'的添加。我已经用二进制解决了类似的问题,但这种十六进制表示让我感到困惑。

谁能给我解释一下这里会发生什么?

最佳答案

'\xff' 等效于二进制中的所有 1signed int 中的 -1

所以最初 c = 0xff00

c = c + '\xff'

二进制是

c = 1111 1111 0000 0000 + 1111 1111 1111 1111

产生 signed short int

c = 1111 1110 1111 1111 (0xfeff)

cd 因赋值而相等,但 e 右移两次

e = 0011 1111 1011 1111 (0x3fbf)

我冒昧地测试了一下。在我添加的代码中,short int f 分配了 c - 1 的值。

unsigned short int c = 0xff00, f;
unsigned short int d, e;

f = c-1;
c = c + '\xff';
d = c;
e = (d >> 2);

printf("%4x, %4x, %4x, %4x\n",c,d,e,f);

cf 的结果相同。 f = c - 1 不是缓冲区溢出。 c + '\xff' 也不是缓冲区溢出

feff, feff, 3fbf, feff

Zan Lynx 所述,我在示例代码中使用了 unsigned short int,但原始帖子是 signed short int。使用 signed int 输出将有 4 个额外的 f。

关于c - 添加 0xff 对按位运算的影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20668848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com