lshift = 整数を左にビットシフトする(Gawk専用) - AWK
○Gawk on Windows ○(注記あり)Gawk ×mawk32 ×Mawk ×awk
符号なし整数値であると解釈して、左にビットシフトします。(論理シフトに相当します。)o 対応しているのは整数のみです。実数や文字列を直接演算する機能はありません。
**** 書式
--------
lshift( シフトしたい値, シフトするビット数 )
--------
o シフトしたい値 -- 整数を指定します。
+ 負の値を指定した場合、符号なし整数値であると解釈します。値は0よりも大きくなります。
o シフトするビット数 -- 正の整数を指定します。
+ 負の値を指定した場合、右シフトではなく、左に最後までシフトした所から逆算します。
o 戻り値 -- 演算結果です。符号なし整数の形になります。
**** 使用例
--------
BEGIN {
print lshift(393, 1); # 結果は 786
print lshift(1, 1); # 結果は 2
print lshift(1, 2); # 結果は 4
print lshift(0, 1); # 結果は 0
print lshift(-1, 1); # 結果は 4294967294 もしくは 8589934590
print lshift(-1, 2); # 結果は 4294967292 もしくは 17179869180
}
--------
o 結果は左から、Gawk on Windows 3.1.7、Gawk for Windows 3.1.6
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。
**** 機能
o 符号なし整数値であると解釈して、左にビットシフトします。(論理シフトに相当します。)
o ビットシフトして出来た右側の空きには、0が入ります。
o シフト結果が 4294967295 を超える時、処理系によって返す値が異なります。
o 負の値も指定出来ますが、結果は符号なし整数の形になります。
o 実数を指定すると、小数点以下を数学的に切り捨てます。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
+ 半角空白は読み飛ばします。
+ それ以外の文字があると、0 とみなして演算します。
o この機能をサポートしていない処理系があります。
** 処理系に依存する動作
o 扱う事の出来る値の範囲は、処理系によって異なります。
o 4294967295(= 32ビット =10桁程度)まで計算出来る処理系(= 32ビット整数)
+ Gawk on Windows 3.1.7
+ この処理系の場合、正しくシフト出来るのは 31ビットまでです。
o 4503599627370496(= 53ビット =16桁程度)まで計算出来る処理系(= おそらくdouble型に依存)
+ Gawk for Windows 3.1.6
+ この処理系の場合、正しくシフト出来るのは 52ビットまでです。
+ 32ビット整数と同等の動きをさせたい時は、シフトした結果の上位桁を切り捨てます。
+ 例えば、and(rshift(v, n), 0xffffffff)
**** 確認した処理系
o Gawk on Windows 3.1.7
o Gawk for Windows 3.1.6 -- 求めるのは浮動小数点形式としての左シフト
o mawk MBCS (32bit版) 1.3.3 -- 非対応
o Mawk for Windows 1.3.3 -- 非対応
o original = the one true awk(updated May 1, 2007) -- 非対応
==
関連ページ:
▼AWKの数値計算関数と関連機能(▼ABC順)
▼AWKプログラムを書く(▼ABC順)
▼AWK
▼制作メモ
> rshift = 整数を右にビットシフトする(Gawk専用)
OFMT = 数値から文字列への自動変換に使う書式その1。数値1つだけの時
CONVFMT = 数値から文字列への自動変換に使う書式その2。数値と文字列を結合する時
+
and = AND演算する。整数をビット毎に論理積(Gawk専用)
or = OR演算する。整数をビット毎に論理和(Gawk専用)
xor = XOR演算する。整数をビット毎に排他的論理和(Gawk専用)
compl = NOT演算する。整数の1の補数(Gawk専用)
strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)