アカウント名:
パスワード:
Javaに限らず、C/C++でも大抵はそうなります。算術シフトと論理シフト、記号はどっちも>>。ただのこの区別って仕様化されてたか、未定義だけど大抵そう実装されてるって話だったかは忘れた。
Javaには符号無し整数型が存在しないので、 >> が算術右シフト、>>> が論理右シフトであると定められています(JLSに書かれた仕様)。C/C++に右シフトの演算子は >> の一種類しかありませんが、符号無し整数なら論理右シフトになることが保証されています(仕様)。負の符号付き整数を右シフトしたとき何が起きるかは処理系定義なので(仕様)算術右シフトになるかもしれませんし論理右シフトになるかもしれませんが、どちらなのかは処理系のマニュアルのどこかで文書化されているはずです(たとえばVC++の場合 [microsoft.com])。そもそも負数の内部表現が2の補数であるとは限りませんし。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
ハードウェアでは昔からよく有る事 (スコア:2, おもしろおかしい)
それが表に出てくる事はほとんどありませんが、1994年のPentium FDIV命令の話は有名ですよね。
Re: (スコア:2, 参考になる)
もろもろの事情で浮動小数点演算ができない時には、固定小数点演算で計算する事があります。
固定小数点演算は早いのですが「合計を求める」など多数の数字を足し合わせる処理は苦手です。(オーバーフローの恐れがある)
それでも合計を求めたい場合は最下位ビットを切り捨てながら計算する場合があります。
int step;
for (int i = 1;i < nums.length; i *= 2 ){ //加算をツリー状に行う
step = i<<1;
for (int j =
Re:ハードウェアでは昔からよく有る事 (スコア:0)
Javaに限らず、C/C++でも大抵はそうなります。
算術シフトと論理シフト、記号はどっちも>>。
ただのこの区別って仕様化されてたか、未定義だけど大抵そう実装されてるって話だったかは忘れた。
Re: (スコア:0)
Javaには符号無し整数型が存在しないので、 >> が算術右シフト、>>> が論理右シフトであると定められています(JLSに書かれた仕様)。
C/C++に右シフトの演算子は >> の一種類しかありませんが、符号無し整数なら論理右シフトになることが保証されています(仕様)。負の符号付き整数を右シフトしたとき何が起きるかは処理系定義なので(仕様)算術右シフトになるかもしれませんし論理右シフトになるかもしれませんが、どちらなのかは処理系のマニュアルのどこかで文書化されているはずです(たとえばVC++の場合 [microsoft.com])。そもそも負数の内部表現が2の補数であるとは限りませんし。