Matlab中的位级操作

Sha*_*han 4 matlab bit-manipulation

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

int instructionWord;
a = (instructionWord >>> 21) & 0x1F;
Run Code Online (Sandbox Code Playgroud)

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

Kla*_*CPH 5

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

a = mod( floor(instructionWord/2^21), 32)
Run Code Online (Sandbox Code Playgroud)

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

a = bitand( bitshift(instructionWord, -21), hex2dec('1F'))
Run Code Online (Sandbox Code Playgroud)

如果你提供除了整数之外的任何东西,最后一个方法将抛出一个错误.

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