我们如何在 Matlab 中进行这种位级操作:
int instructionWord;
a = (instructionWord >>> 21) & 0x1F;
代码将指令字右移 21 位并获得至少 5 位。这如何在 Matlab 中等效地完成?
我们如何在 Matlab 中进行这种位级操作:
int instructionWord;
a = (instructionWord >>> 21) & 0x1F;
代码将指令字右移 21 位并获得至少 5 位。这如何在 Matlab 中等效地完成?
鉴于您的输入值是一个整数,您可以执行以下操作:
a = mod( floor(instructionWord/2^21), 32)
另一个更像位的解决方案是:
a = bitand( bitshift(instructionWord, -21), hex2dec('1F'))
如果你给它提供除整数以外的任何东西,最后一种方法将引发错误。
顺便说一句,你的变量指令字被声明为一个有符号整数。但如果它是一个指令字或类似的东西,无符号整数会更有意义。上面的表达式期望您的输入只是积极的。如果不是,则需要更多代码来>>>
在 matlab 中对(逻辑右移)进行建模。
请参阅位移页面:
代码
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页面。
a = rem( bitshift(指令字, -21) , 2^5)
bitshift进行位的移位;并rem找到除以 32 的余数,给出最后 5 位的值。