No.4ベストアンサー
- 回答日時:
> 上記コードの場合、乱数をビットシフトして6で割ったあまりと、回りくどいやり方が必要なのでしょう
まず、numで割った余り、というのは、 0<=n<numの整数乱数nを求めるため、というのはよろしいでしょうか。
ビット演算ですが、今回の例では、乱数の質を高めようとしているのだと思われます。
コンピュータが発生する乱数の多くは「疑似乱数」といって、一見バラバラに見えて、実際には計算によって求めたもので、同じ初期条件からは同じ「乱数」が同じ順番で発生します。
JavaのRandomには「線形合同法」という非常に単純で、質のあまりよろしくないものが使われています。
ここでいう質とは、値が偏らない、とか、短いパターンを繰り返さない(奇数のあとには必ず偶数、とかいうことが無い)とかいうものです。
線形合同法では、上位ビットや下位ビットに傾向が出やすいので、真ん中あたりを使って質を上げる、というテクニックがあります。劇的な効果は無いですが、ちょっとだけましになります。
参考URL:http://www001.upp.so-net.ne.jp/isaku/rand.html
No.3
- 回答日時:
gfe01045 です。
>> ビット演算を使用するメリットがいまいち解らないのですが・・・。
処理の速さ以外にはメリットは特にないと思います。
ただ、ビット単位の操作を行なわなければならないプログラムを書くときには必ず使うやりかたです。
画像処理などでデータのビット変換(マスキング)等・・・
+-などの演算子と同じようなものと考えています!!
頑張ってください!!
No.2
- 回答日時:
つぎのソースをコンパイルして実行してみてください。
おおむね理解しやすいと思います!!
public class bit{
public static void main(String[] args){
int bits=6;//0110
System.out.println(bits&15);//and
System.out.println(bits|15);//or
System.out.println(bits^15);//xor
System.out.println(~bits); //not//符合付き
System.out.println(bits>>2);//rshift
System.out.println(bits<<2);//lshift
}
}
アドバイスありがとうございます。
ビット演算について、もう少し勉強してみます。
ビット演算を使用するメリットがいまいち解らないのですが・・・。
上記コードの場合、乱数をビットシフトして6で割ったあまりと、回りくどいやり方が必要なのでしょう(+o+)
No.1
- 回答日時:
論理右シフトの演算子です。
http://download.oracle.com/javase/tutorial/java/ …
http://en.wikipedia.org/wiki/Logical_shift
#日本語版は図がないからなあ>Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83% …
アドバイスありがとうございます。
上記リンクを参考にビット演算について、もう少し勉強してみます。
上記コードの場合、乱数をビットシフトして6で割ったあまりと、回りくどいやり方が必要なのでしょう(+o+)
ビット演算を使用するメリットは高速に処理できるという事なのでしょうか?
コードを見ても非常に解りづらくなってしまうので、普通に四則演算したいのですが・・・(^_^;)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# int tff(int clk) { static int state = 0; //状態 stat 1 2022/07/11 21:14
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインターに関する警告
-
[JAVA]try 内の変数を外で!?
-
EclipseでJava
-
JSPやサーブレットでSystem.out...
-
nullcline
-
ランダムで月を生成し、その月...
-
JAVAのエラーの意味が分かりま...
-
文字列の引き算
-
Javaでカレントディレクトリを...
-
java プログラミングについて
-
JAVAのDouble型の小数点以下の...
-
会員情報登録プログラムの作成...
-
Javaのコマンドライン引数を使...
-
LC発振回路-ループ利得
-
JAVA 文字色変更
-
複数行キーボード入力した後に...
-
改行の判定方法
-
曜日の取得方法を教えて下さい!
-
ループ処理の際、最後だけ","を...
-
System.out.printlnの意味がよ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
[JAVA]try 内の変数を外で!?
-
JSPやサーブレットでSystem.out...
-
C言語のポインターに関する警告
-
改行の判定方法
-
EclipseでJava
-
JAVAのDouble型の小数点以下の...
-
Javaでカレントディレクトリを...
-
文字列の引き算
-
JAVA 文字色変更
-
Javaのプログラムがどうしても...
-
エクセルマクロ文で、赤文字セ...
-
java シンボルが見つかりません...
-
java int integer
-
配列を後ろから数えるには?
-
java.util.zipで作成したアーカ...
-
JAVAのエラーの意味が分かりま...
-
会員情報登録プログラムの作成...
-
nullcline
-
コマンドプロンプトでひらがな...
-
NaNではなく、0と表示させたい
おすすめ情報