Matlab でこのビット レベルの操作を行うにはどうすればよいですか。
int instructionWord;
a = (instructionWord >>> 21) & 0x1F;
このコードは、instructionWord を 21 だけ右にシフトし、最下位の 5 ビットを取得します。これをMatlabで同等に行うにはどうすればよいですか?
Matlab でこのビット レベルの操作を行うにはどうすればよいですか。
int instructionWord;
a = (instructionWord >>> 21) & 0x1F;
このコードは、instructionWord を 21 だけ右にシフトし、最下位の 5 ビットを取得します。これをMatlabで同等に行うにはどうすればよいですか?
入力値が整数の場合、次のことができます。
a = mod( floor(instructionWord/2^21), 32)
もう1つの少し似たソリューションは次のとおりです。
a = bitand( bitshift(instructionWord, -21), hex2dec('1F'))
最後のメソッドは、整数以外を入力するとエラーになります。
ところで、変数 instructionWord は符号付き整数のように宣言されています。しかし、それが命令語などである場合は、符号なし整数の方が理にかなっています。上記の式は、入力が正のみであることを想定しています。>>>
そうでない場合は、 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
編集特定のビット値を抽出する方法については、ビットゲットページを 参照してください。
a = rem( ビットシフト(命令語, -21) , 2^5)
bitshiftはビットのシフトを行います。remは、最後の 5 ビットの値を与える 32 で割った余りを見つけます。