2012-04-06 51 views
0

我正在做和MARS模拟器(组装)的作业,我一直在坚持。 我们讨厌将一个32位字加载到注册表中。 0到7的位表示蓝色,8到15位表示绿色,而16到23位表示红色。其余的位被设置为零。例如,黄色是0x00ffff00。位算术 - 连接两个结果在一个位

作业被分成树任务,我在最后一个。 我们有一个64×64像素的显示器(每个像素是4×4,因此总宽度和高度都是256)。红色总是设置为0,绿色是4 *线的数量,蓝色是4 *列的数量。想象一下,我们在2线和3排,绿色值将是2 * 4和蓝色值3 * 4。 因此,在这个例子中,在十六进制中,12将是0xc和8 0x08,应该加载到注册表中的数字将是0x00000c08。

所以我的第一个疑问是,我怎样才能使用位代数来连接2次乘法的结果呢?
我的第二个疑问是这样的。想象一下,我们是我们必须做的最后一个像素64 * 4和64 * 4.结果是256,我们不能只用8位来表示这个数字,所以我可能不应该使用像素1到64,但是0到63。对?

+0

使用二进制移或2 ^多个N-。顺便提一下哪个处理器? – BlackBear 2012-04-06 16:29:40

+0

认为0-63不是1-64。 63 = 0x3F 63 * 4 = 0x3F << 2 = 0xFC适合8位以内没有问题。 – 2012-04-06 16:36:27

+0

带有x64处理器的Windows。提供的例子是什么?对不起,但我不明白。 – Favolas 2012-04-06 16:36:37

回答

1

所以你有0x08和0x0C,你想要0x0C08?

查一查位移位

在C语言中一样会像

(0x0C << 8) | 0x08 

(0x0C << 8) gives 0x0C00 
+1

难道你不是指(0x0C << 8)| 0x08'? – harold 2012-04-06 16:51:34

+0

是的,我的意思是说,很高兴看到有人正在关注 – 2012-04-06 17:27:47

+0

@TonyHopkinson谢谢。与您的建议设法解决我的问题:) – Favolas 2012-04-06 19:16:44