【初心者】Java質問・相談スレッド94【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0400デフォルトの名無しさん
2006/12/01(金) 23:03:1900100111011
11110101001
という数字がある場合ある範囲だけを選択して入れ替える又はNOTをしたいです。
00|100111|011→00|1101010|11
11|110101|001→11|1001110|01
としたい場合はどういう考え方をしたらいいですか?
用途としては2つの数を2点交叉や突然変異を起こす為に使いたいのです。
自分で思いついたのでは数字1個につき配列を与えて0か1を代入させる
byte[] b1 = {0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1};
byte[] b2 = {1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1};
for(int i=2; i<8; i++) {
temp = b1[i];
b1[i] = b2[i];
b2[i] = temp;
}
元の数を2進にするには上から1024,512,256...と引けたら1を入れる、引けないなら0。
2進→10進も逆でやるつもりです。
もしくはInteger.toBinaryString(int i);が使えるようなら有効に使いたいです。
これでは余りにもスマートとは言えない考え方です。
もっとスマートにできるやり方をご存知でしたらご教授いただきたいです。
よろしくお願いします。
■ このスレッドは過去ログ倉庫に格納されています