2012-04-06 21 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