Matlab中的位级操作

时间:2013-02-06 14:53:34

标签: matlab bit-manipulation

我们如何在Matlab中进行这种位级操作:

int instructionWord;
a = (instructionWord >>> 21) & 0x1F;

代码右移指令字21并获得最少5位。如何在Matlab中等效地完成?

3 个答案:

答案 0 :(得分:5)

鉴于您的输入值是整数,您可以执行以下操作:

a = mod( floor(instructionWord/2^21), 32)

另一个更像位的解决方案是:

a = bitand( bitshift(instructionWord, -21), hex2dec('1F'))

如果你输入除了整数之外的任何东西,最后一个方法会抛出一个错误。

顺便说一句,你的变量instructionWord被声明为有符号整数。但如果它是一个指令字或类似的东西,无符号整数会更有意义。上面的表达式期望您的输入只是正数。如果没有,则需要更多代码来模拟matlab中的>>>(逻辑右移)。

答案 1 :(得分:3)

请参阅bitshift页面:

<强>代码

a = intmax('uint8');
s1 = 'Initial uint8 value %5d is %08s in binary\n';
s2 = 'Shifted uint8 value %5d is %08s in binary\n';
fprintf(s1,a,dec2bin(a))
 for i = 1:8
    a = bitshift(a,1);
    fprintf(s2,a,dec2bin(a))
 end

<强>输出

Initial uint8 value   255 is 11111111 in binary
Shifted uint8 value   254 is 11111110 in binary
Shifted uint8 value   252 is 11111100 in binary
Shifted uint8 value   248 is 11111000 in binary
Shifted uint8 value   240 is 11110000 in binary
Shifted uint8 value   224 is 11100000 in binary
Shifted uint8 value   192 is 11000000 in binary
Shifted uint8 value   128 is 10000000 in binary
Shifted uint8 value     0 is 00000000 in binary

修改 请参阅bitget页面,了解如何提取特定的比特值。

答案 2 :(得分:2)

  

a = rem(bitshift(instructionWord,-21),2 ^ 5)

bitshift 执行位移位;并且 rem 在除以32的余数中找到最后5位的值。