【发布时间】:2013-02-07 00:54:11
【问题描述】:
我正在阅读别人的代码,但不太明白它是如何工作的。这是三行代码。我想知道w3的值是什么:
int w1 = fgetc(fp) & 0xFF;
int w2 = fgetc(fp) & 0xFF;
int w3 = w1 + (w2 << 8);
我知道 fgetc() 从 FILE* fp 返回一个字符,但是当他在值为 0xFF 的字符上使用 & 运算符时,我感到很困惑。然后在 w2 上使用按位移位运算符并将其添加到 w1。我不确定我应该期待一个字符还是一个整数。这是一个程序的代码 sn-p,它从文件中读取二进制数据,生成 UV 坐标作为输出。但我不太关心这个,更关心上面的代码是如何工作的。
提前感谢您的任何回复。
【问题讨论】:
-
首先,
fgetc()返回一个int,而不是一个字符。其次,他清除了返回的int的低 8 位以外的所有值,然后将第二个 8 位值w2滑入 @ 的低 16 位 (0..15) 的第 8-15 位987654326@。完成后,他将拥有(假设为 32 位整数)0x0000w2w1作为w3中的值,但是更重要的是,如果fp位于EOF,并且EOF在任一fgetc()上返回,这可能会很快变得丑陋.
标签: c++ hex bit-manipulation operator-keyword shift