使用按位和运算符赋值
Assigning values with bitwise and operator
我知道这是非常微不足道的事情,但我无法全神贯注。
假设我正在处理 this message. 这是一条 3 字的消息,每个字 16 位。如果我试图编写伪代码来进行这些变量赋值,这是否正确:
var1 = (word 1) & 0x7FFF
tmp1 = (word 1 >> 15) & 0x0001
tmp2 = (word 2 & 0x3FFF) << 14
var2 = tmp1 + tmp2
tmp1 = (word 2 >> 14) & 0x0003
tmp2 = (word 3 & 0x7FFF) << 15
var3 = tmp1 + tmp2
不,它没有将 word2
中的位放在 var2
中的正确位置,也没有将 word3
中的位放在 var3
中的正确位置,图文并茂:
0 is a 0 bit,
1 comes from word1
2 comes from word2
3 comes from word3
var1 = 0111 1111 1111 1111 (good)
var2 = ... 2200 0000 0000 0001 (not good)
var3 = ... 3000 0000 0000 0022 (not good)
中间不应有大片零。
额外的零在那里是因为向左的移位太大了。应该是:
var1 = (word 1) & 0x7FFF
tmp1 = (word 1 >> 15) & 0x0001
tmp2 = (word 2 & 0x3FFF) << 1
var2 = tmp1 + tmp2
tmp1 = (word 2 >> 14) & 0x0003
tmp2 = (word 3 & 0x7FFF) << 2
var3 = tmp1 + tmp2
我知道这是非常微不足道的事情,但我无法全神贯注。
假设我正在处理 this message. 这是一条 3 字的消息,每个字 16 位。如果我试图编写伪代码来进行这些变量赋值,这是否正确:
var1 = (word 1) & 0x7FFF
tmp1 = (word 1 >> 15) & 0x0001
tmp2 = (word 2 & 0x3FFF) << 14
var2 = tmp1 + tmp2
tmp1 = (word 2 >> 14) & 0x0003
tmp2 = (word 3 & 0x7FFF) << 15
var3 = tmp1 + tmp2
不,它没有将 word2
中的位放在 var2
中的正确位置,也没有将 word3
中的位放在 var3
中的正确位置,图文并茂:
0 is a 0 bit,
1 comes from word1
2 comes from word2
3 comes from word3
var1 = 0111 1111 1111 1111 (good)
var2 = ... 2200 0000 0000 0001 (not good)
var3 = ... 3000 0000 0000 0022 (not good)
中间不应有大片零。
额外的零在那里是因为向左的移位太大了。应该是:
var1 = (word 1) & 0x7FFF
tmp1 = (word 1 >> 15) & 0x0001
tmp2 = (word 2 & 0x3FFF) << 1
var2 = tmp1 + tmp2
tmp1 = (word 2 >> 14) & 0x0003
tmp2 = (word 3 & 0x7FFF) << 2
var3 = tmp1 + tmp2