了解CHIP8模拟器中的一段代码
Understanding a piece of code in CHIP8 emulator
我正在编写一个CHIP8模拟器。到目前为止,我写了所有的东西,除了操作码DXYN
,我为它寻找了一些解释,我在so中发现了一个问题,并用一个代码作为答案。在阅读代码时,我被这段代码卡住了,C中说if((data & (0x80 >> x)) != 0)
(data & (0x80 >> x))
到底做什么?
if
语句检查字节中是否设置了位#x,将0计数为最高位。
Bit# 01234567
01001010 (0x4A has bit 1, 4 and 6 set)
(data & (0x80 >> x)) returns 0x40 for x=1
0x08 for x=4
0x02 for x=6
0x00 for all other values.
换句话说,对于x=1、x=4和x=6 ,if((data & (0x80 >> x)) != 0)
为真
如果我们把它分开,我们就有
0x80 >> x
其将值CCD_ 6(0x80
)右移CCD_。
下一部分使用上一个结果作为data
的掩码,以查看它是否在data
中设置了特定位。
然后将整体与零进行比较,以查看该位是否已设置。
相关文章:
- 如何为一段代码启用 -permissive
- 使用Qt Creator在调试模式下编译一段代码
- 防止一段代码在协程中并发执行
- 通过创建单个线程来运行一段代码可加快执行速度
- 有没有一种标准方法来确保一段代码在全局范围内执行
- C++函数 Sleep() 在一段代码之前执行
- C++中的继承和模板:为什么以下一段代码不编译?
- 一段C++代码出现错误"invalid pointer"
- 我必须编写一段代码,基本上执行c++中的strlen()函数,哪里出了问题
- 关于行列式计算的一段代码的问题
- 将两个或多个互斥体应用于一段代码
- 使类使用浮点数和整数(分析一段代码)
- 如何在C++中编写一段代码以查找系统路径上文件的完整路径
- 从第二次调用开始在函数中执行一段代码
- 将一段C++代码封装到Python中
- 解释一段c++代码
- 了解CHIP8模拟器中的一段代码
- 将一段代码从c++转换为c#
- 如何只执行一段代码一次
- 如何对依赖于Asio的一段代码进行单元测试