コマンドラインの数が2の累乗であることを確認してください。

コマンドラインの数が2の累乗であることを確認してください。

コマンドラインに入力された数字が2の累乗であることを確認するbashスクリプトを作成することはできません。

入力する

# ./pow2script.sh xyzdf 4 8 12 -2 USAD

希望の出力:必要な出力は別々の行になければなりません。

4
8

なぜなら、4は2^2で、8は2^3だからです。

pow2script.shの内容

#!/bin/bash

function is_power_of_two () {
    declare -i n=$1
    (( n > 0 && (n & (n - 1)) == 0 ))
}

for number; do
    if is_power_of_two "$number"; then
        printf "%d\n" "$number"
    fi
done

ベストアンサー1

数字が2の累乗であることを確認するための良い近道があります。

0b100000そのような数字が2進数で表される場合、数字32のように1の後に0が続く文字列になります。そこから1を引くと0があるところは1になり、0があるところは0になります。たとえば、0b011111数字31は32 - 1です。 2つをビット単位でANDすると0になります。この属性は、2の累乗(および0)の数値にのみ有効です。

だから:

function is_power_of_two () {
    declare -i n=$1
    (( n > 0 && (n & (n - 1)) == 0 ))
}

次のように使用してください。

for number; do
    if is_power_of_two "$number"; then
        printf "%d\n" "$number"
    fi
done

実行結果は次のとおりです。

$ ./power2.sh 1 2 3 4 5 7 8 9 31 32 33 -2
1
2
4
8
32

おすすめ記事