2010年9月15日水曜日

compl = NOT演算する。整数の1の補数(Gawk専用) - AWK

AWKの数値計算関数と関連機能
○Gawk on Windows △(注記あり)Gawk ×mawk32 ×Mawk ×awk
符号なし整数値であると解釈して、NOT演算します = ビット毎に否定します = 1の補数を取ります。

o NOT演算は、1の時は0、0の時は1にする演算です。ビット毎に判定します。
o 対応しているのは整数のみです。実数や文字列を直接演算する機能はありません。
o 処理系によって返す値が異なりますので、注意が必要です。

**** 書式
--------
compl( 演算したい値 )
--------

o 演算したい値 -- 整数を指定します。
o 戻り値 -- 演算結果です。符号なし整数の形になります。


**** 使用例
--------
BEGIN {
  print compl(393); # 結果は 4294966902 もしくは 9007199254740598
  print compl(0); # 結果は 4294967295 もしくは 9007199254740991
  print compl(-1); # 結果は 0 もしくは 9007194959773696
}
--------

o 結果は左から、Gawk on Windows 3.1.7、Gawk for Windows 3.1.6
o 行末のセミコロンは、C言語の書き方に合わせました。無くても動きます。


**** 機能
o 符号なし整数値であると解釈して、NOT演算します = ビット毎に否定します = 1の補数を求めます。
o 負の値も指定出来ますが、結果は符号なし整数の形になります。
o 実数を指定すると、小数点以下を数学的に切り捨てます。
o 数値の後ろに文字列が続いていても、大丈夫です。
o 先頭に数値以外の文字がある場合
   + 半角空白は読み飛ばします。
   + それ以外の文字があると、0 とみなして演算します。
o この機能をサポートしていない処理系があります。

** 処理系に依存する動作
o 補数の取り方は、処理系によって異なります。
o 32ビット整数として補数を求める処理系
   + Gawk on Windows 3.1.7
   + 4294967295まで計算出来ます。

o おそらくdouble型の補数を求める処理系
   + Gawk for Windows 3.1.6
   + 16桁程度まで計算出来ます。でも、浮動小数点形式の補数ですので、使い所が難しそうです。


**** 確認した処理系
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
    ▼制作メモ
    > lshift = 整数を左にビットシフトする(Gawk専用)
    rshift = 整数を右にビットシフトする(Gawk専用)
    OFMT = 数値から文字列への自動変換に使う書式その1。数値1つだけの時
    +
    and = AND演算する。整数をビット毎に論理積(Gawk専用)
    or = OR演算する。整数をビット毎に論理和(Gawk専用)
    xor = XOR演算する。整数をビット毎に排他的論理和(Gawk専用)
    strtonum = 10進数、8進数、16進数の文字列を数値に変換する(Gawk専用)