and ( w1 w2 – w ) core “and”
or ( w1 w2 – w ) core “or”
xor ( w1 w2 – w ) core “x-or”
invert ( w1 – w2 ) core “invert”
mux ( u1 u2 u3 – u ) gforth-1.0 “mux”
multiplex(多重化): u3 の各ビットについて、 そのビットが 1 の場合は u1 から対応するビットを選択し、
それ以外の場合は u2 から対応するビットを選択します。 たとえば、 %0011 %1100 %1010 mux は
%0110 となります。
lshift ( u1 u – u2 ) core “l-shift”
u1 を u ビット左シフトします。
rshift ( u1 u – u2 ) core “r-shift”
u1 (セル) を u ビットだけ右にシフトし、 シフトインされたビットを 0 で埋めます(論理/符号無しシフトです)。
arshift ( n1 u – n2 ) gforth-1.0 “ar-shift”
n1 (セル) を u ビット右にシフトし、n1 の符号ビットからシフトインされたビットを埋めます (算術シフト)。
dlshift ( ud1 u – ud2 ) gforth-1.0 “dlshift”
ud1 (2倍長セル) を u ビット左にシフトします。
drshift ( ud1 u – ud2 ) gforth-1.0 “drshift”
ud1 (2倍長セル) を u ビットだけ右にシフトし、 シフトインされたビットを 0 で埋めます (論理/符号なしシフト)。
darshift ( d1 u – d2 ) gforth-1.0 “darshift”
d1 (2倍長セル) を u ビット右にシフトし、d1 の符号ビットからシフトインされたビットで埋めます (算術シフト)。
2* ( n1 – n2 ) core “two-star”
1 つ左にシフトします。符号なしの数値でも機能します
2/ ( n1 – n2 ) core “two-slash”
1 つ右に算術シフトします。 符号付き数値の場合、 これは 2 による floored division になります(/ は必ずしも
floors ではないことに注意してください)。
d2* ( d1 – d2 ) double “d-two-star”
2倍長セルを左に 1 シフトします。 符号なしの数値でも機能します
d2/ ( d1 – d2 ) double “d-two-slash”
1 つ右に算術シフトします。 符号付き数値の場合、これは 2 による floored division になります。
>pow2 ( u1 – u2 ) gforth-1.0 “to-pow2”
u2 は、u2>=u1 の最小の 2 のべき乗数です。
log2 ( u – n ) gforth-1.0 “log2”
N は u の切り捨て2進対数、 つまり最初に設定されたビットのインデックスです。 u=0 の場合は n=-1 です。
pow2? ( u – f ) gforth-1.0 “pow-two-query”
f は、 u が 2 の累乗の場合、 つまり u のビットが 1 つだけセットされている場合に true になります。
ctz ( x – u ) gforth-1.0 “c-t-z”
x の2進数表現で末尾からのゼロの数を数える
他のほとんどの操作とは異なり、 幅の狭いユニットのローテートと幅の広いユニットのローテートを簡単に合成することはできないため、 1倍長セル幅および 2倍幅のセル幅のローテート操作を使用すると、 結果がセル幅に依存することになります。 公開されたアルゴリズムまたはセル幅に依存しない結果の場合、 通常は固定幅のローテート操作を使用する必要があります。
wrol ( u1 u – u2 ) gforth-1.0 “wrol”
u1 の下位側 16 ビットを u ビットだけ左に回転し、 他のビットを 0 にセットします。
wror ( u1 u – u2 ) gforth-1.0 “wror”
u1 の下位側 16 ビットを u ビットだけ右回転し、 他のビットを 0 にセットします。
lrol ( u1 u – u2 ) gforth-1.0 “lrol”
u1 の下位側 32 ビットを u ビットだけ左に回転し、 他のビットを 0 にセットします。
lror ( u1 u – u2 ) gforth-1.0 “lror”
u1 の下位側 32 ビットを u ビットだけ右回転し、 他のビットを 0 にセットします。
rol ( u1 u – u2 ) gforth-1.0 “rol”
u1 のすべてのビットを u ビットだけ左に回転します。
ror ( u1 u – u2 ) gforth-1.0 “ror”
u1 のすべてのビットを u ビットだけ右回転します。
drol ( ud1 u – ud2 ) gforth-1.0 “drol”
ud1 (2倍長セル) のすべてのビットを u ビットだけ左に回転します。
dror ( ud1 u – ud2 ) gforth-1.0 “dror”
ud1 (2倍長セル) のすべてのビットを u ビット右に回転します。