首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ruby模拟C整数数据类型和联合

Ruby模拟C整数数据类型和联合
EN

Stack Overflow用户
提问于 2018-11-19 13:27:20
回答 1查看 83关注 0票数 0

我试着用Ruby做一个Chip-8仿真器,因为我的朋友以前用C++做过,但是我偶然发现了一些问题,请注意,我对Ruby只有一些知识,我认为这个项目将是提高我在这种语言中的技能的一个好方法。

我读过关于元帅班的文章,但我不知道该如何使用它。http://hackage.haskell.org/package/ruby-marshal-0.1.2/docs/Data-Ruby-Marshal-Int.html

因此,基本上,芯片-8操作码是it 16的,但我需要得到指令的较低和最上面的位,这样我才能正确地解释它。在C++中,他使用了一个联合类型和基本的int数据类型,如下所示

代码语言:javascript
复制
struct Instruction {
    union {
        uint16_t opcode;
        struct {
            uint8_t lower;
            uint8_t upper;
        } bytes;
    };

如何模拟特定的uint8_t和uint16_t类型?我不介意工会不得不用工会换别的东西。

此外,这是否是使用和管理内存的最佳方式?实际上,我不知道下面的代码是否正确,因为我只能访问记事本atm。

代码语言:javascript
复制
class Memory
    @memory = Hash.new(Array.new)
    @memory[:system] = Array.new(0x200, 0)
    @memory[:rom] = Array.new(0xCA0, 0)
    @memory[:internal] = Array.new(0x5F, 0)
    @memory[:refresher] = Array.new(0xF0, 0)

    @stack = Array.new(0) #Gotta stick with push/pop
end

class Chip8
    def initialize
        @memory = Memory.new
EN

回答 1

Stack Overflow用户

发布于 2018-11-19 13:47:46

您可以通过按位操作获得16位字的高字节和低字节:

代码语言:javascript
复制
high_byte = opcode >> 8
low_byte = opcode & 0xFF

上述假设假设opcode已经被限制在16位无符号整数的范围内.

相反:

代码语言:javascript
复制
opcode = (high_byte << 8) | low_byte

上述假设假设high_bytelow_byte被限制在8位无符号整数的范围内.

这种方法在C++中可能也会更好,因为联盟依赖于系统的特性(从技术上讲,这是一个非标准的扩展,尽管受到流行编译器的广泛支持)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53375662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档