【发布时间】:2020-08-31 09:18:52
【问题描述】:
所以我正在分析 Nes-Emulator 代码,我遇到了这行我无法理解的代码:
nMapperID = ((header.mapper2 >> 4) << 4) | (header.mapper1 >> 4);
为什么 header.mapper2 是向右移动一次,然后向左移动一次。
头文件是这个结构体:
struct sHeader
{
char name[4];
uint8_t prg_rom_chunks;
uint8_t chr_rom_chunks;
uint8_t mapper1;
uint8_t mapper2;
uint8_t prg_ram_size;
uint8_t tv_system1;
uint8_t tv_system2;
char unused[5];
} header;
【问题讨论】:
-
假设你有
11110011,(11110011 >> 4) << 4给你什么? -
不是 100% 但会是 11110000 吗?
-
正确。现在你明白他们为什么这样做了吗?
-
@HamzaKhan 正确。向右移动 N 次,然后向左移动 N 次,有效地将最右边的 N 位设置为 0。在这种情况下,
(header.mapper2 >> 4) << 4与header.mapper2 & 0xF0有效相同 -
char unused[5];的意义何在?
标签: c++ emulation bitwise-operators bit-shift