使用按位和运算符分配值

问题描述 投票:1回答:1

我意识到这是非常琐碎的事情,但是我无法将其包裹住。

假设我正在使用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
bit-manipulation bitwise-operators pseudocode bit-shift bitwise-and
1个回答
0
投票

[不,它没有将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
© www.soinside.com 2019 - 2024. All rights reserved.