0

シェルからビット選択を計算するにはどうすればよいですか?

私が次のようなものを持っているとしましょう:i[m:l]

iは整数、mはビット選択のMSB部分、はビット選択lのLSB部分です。例:

  • 250[1:0]-「250」の2LSBビットを返し、答えは「2」になります
  • 250[7:2]-「250」の6MSBビットを返し、答えは「62」になります
4

1 に答える 1

2

これがどれほど移植性があるかはわかりませんが、BashとKSHは、少なくともビット単位の演算(左と右のシフト、ビット単位のANDとOR)、およびべき乗をサポートしています。したがって、これらを直接使用してビットマスクを実行できます。

#! /bin/sh

extract_bits() {
    msb=$1 ; lsb=$2 ; num=$3
    # Number of bits required
    len=$(( $msb + 1 - $lsb ))
    # Bitmask == 2^len - 1
    mask=$(( 2 ** $len - 1 ))
    # Left-shift mask, bitand, right-shift result
    echo $(( ( num & ( $mask << $lsb ) ) >> $lsb ))
}

extract_bits 1 0 250
extract_bits 7 2 250

(シェルスクリプトでこれを行うのが良い考えかどうかについては、まあ、私は確信していません。)

于 2013-03-03T11:59:10.773 に答える