例えば、こんなものを作ってみましたが、いまいちピンと来なくて。。
どの様な法則の上で動いているのかがわからないです。
そして、何の為に使っているのががわからないです。
javascriptでビット演算を使用するメリットはあるのでしょうか?
(処理が早くなる、というのはwikiにも説明があるのでわかりましたが。)
何とぞ、よろしくお願い致します。
x = new Array(
1^0,
1^1,
1^2,
1^3,
1^4,
1^5,
1^6,
1^7,
1^8,
1^9,
1^10,
1^11,
1^12,
1^13,
1^14,
1^15,
1^16,
1^17,
1^18,
1^19,
1^20
);
for (i=0; i<=20; i++){
document.write(
i + ":" + x[i] + "<br>"
);
}
No.4ベストアンサー
- 回答日時:
質問者様がまだ見ていらっしゃるかどうかは不明ですが…。
xorの処理をここで纏めてみます。
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
比較したものが同じ値の時、0(false)になり、
比較したものが違う値の時、1(true)となります。
さて、では質問者様の例を考えてみます。
まずは 1^0
これを2進数で考えると以下のようになります。
0001 = 1
0000 = 0
このように縦にして、同じビット同士でxorを行います。
結果は
0001 = 1
0000 = 0
--------
0001 = 1
となります。
こうした方が分かりやすいですかね…。
0xor0=0
0xor0=0
0xor0=0
1xor0=1
↓ ↓ ↓
1 0 1
次に 1^1 で考えてみます。
0001 = 1
0001 = 1
--------
0000 = 0
となります。
ご提示いただいたものをいくつか2進数に直して計算結果を書いてみます。
0001^0000 (=0001) = 1(1^0の結果)
0001^0001 (=0000) = 0(1^1の結果)
0001^0010 (=0011) = 3(1^2の結果)
0001^0011 (=0010) = 2(1^3の結果)
0001^0100 (=0101) = 5(1^4の結果)
0001^0101 (=0100) = 4(1^5の結果)
0001^0110 (=0111) = 7(1^6の結果)
0001^0111 (=0110) = 6(1^7の結果)
0001^1000 (=1001) = 9(1^8の結果)
0001^1001 (=1000) = 8(1^9の結果)
0001^1010 (=1011) = 11(1^10の結果)
0001^1011 (=1010) = 10(1^11の結果)
0001^1100 (=1101) = 13(1^12の結果)
0001^1101 (=1100) = 12(1^13の結果)
・
・
0001^1111 (=1110) = 14(1^15の結果)
00001^10000 (=10001) = 17(1^16の結果)
1^16ですが4桁では表示しきれない値になったので繰り上げしました。
この時、混乱しないように最初のうちは上記のように桁合わせして計算した方が良いと思います。
>mizutaki様
スイマセン、気になったのでつっこませて下さい。
>>XORはビット演算の結果を反転させ
違うと思います。
ビットの反転はNOT(~)だと思います。
No.3
- 回答日時:
for(y = 1999; y<2010; y++) alert([y,matubi(y,2-1)]);
function matubi( y, m ){
return (m^m<7|30)-(m==1)*(1+(y%4>0^y%100>0^y%400>0));
}
とかなら?
No.2
- 回答日時:
・AND
処理内において複数の関数を呼び出す際に、すべての関数がtrueを返したかを調べる。
この処理だとforの中でif文チェックをするよりは無駄が減ります。
var result = true;
for(i=0; i<x; i++){
result &= hogefunc(i);
}
if(result == true) alert('ok');
else alert('ng');
・OR
関数の中に複数の値を引き渡す方法で使用することがあります。
javascriptと違って開発規模が大きい言語でよく使われる手法。
// DEFAULT_xxx は全体参照として設定されていて、2のn乗の重複しない数値が振り分けられている
function hogefunc( i ){
var str = '';
if( i & DEFAULT_NUM == DEFAULT_NUM )
str = str + '1234567890';
if( i & DEFAULT_S_ALPHA == DEFAULT_S_ALPHA )
str = str + 'abcdefghijklmnopqrstuvwxyz';
if( i & DEFAULT_B_ALPHA == DEFAULT_B_ALPHA )
str = str + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
return str;
}
hogefunc( DEFAULT_NUM | DEFAULT_S_ALPHA ); // 数値とアルファベット小文字が返ってくる
hogefunc( DEFAULT_B_ALPHA ); // アルファベット大だけが返ってくる
XORはビット演算の結果を反転させ、
シフト演算はビット演算の結果の取得などに使ったりするのですが、
intが32ビットを扱えないという制限があるせいで、なかなか使えなかったりしますね。
ビット演算の利用方法はいろいろとありますので、いろんな応用にも使えるかと思います。
後、Javascriptが少し久しぶりなので参考用の処理が間違ってるかもしれませんけど。
なんとなく利用パターンは分かるんじゃないかなと。
参考URL:http://utsukemononi.gozaru.jp/gc/page25.html
No.1
- 回答日時:
>どの様な法則の上で動いているのかがわからないです。
二進数で各位をビット演算(^の場合xor)計算すればわかる。
※()内は10進数表記
1^0
⇒1 xor 0 = 1
1^1
⇒1 xor 1 = 0
1^2
⇒01 xor 10 = 11 (3)
1^3
⇒01 xor 11 = 10 (2)
5^3
⇒101 xor 011 = 110(6)
>何の為に使っているのががわからないです。
>javascriptでビット演算を使用するメリットはあるのでしょうか?
必要な人は必要。
必要でない(わからない)人に説明するのは大変なので省略。
まぁたしかにJavascriptでビット演算を使うことはほとんどないだろうね。
文法の似ているCやJavaも同じ演算子だから、文法を参考にしたときに
同じように残したんだろうね。
Cなら今でもビット演算子を使うことはある。
詳しく知りたいならアセンブラとか低水準言語をやってみるといい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 情報処理技術者・Microsoft認定資格 2進数の問題を教えてください。 1 2022/07/27 09:42
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作成するには 2 2022/10/25 21:19
- JavaScript Q&Aの掲示板を作成していてヤフー知恵袋やgoo質問のように質問ごとにURLを生成したい 5 2023/08/04 01:22
- Oracle ビットで表せる数値について 3 2022/09/12 16:37
- その他(プログラミング・Web制作) プログラミング 処理速度 1 2022/11/25 11:05
- 公認会計士・税理士 地代家賃と前払費用の決算整理仕訳 1 2023/02/25 08:14
- JavaScript GoogleChart 階層ごとのブロックの長さを個別に設定したい 1 2022/07/06 14:27
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- JavaScript 質問すいません。 javascriptの質問で、 人物4名、名前と年齢をオブジェクトと指定し人物1人 2 2022/06/26 22:08
- JavaScript 画像の表示位置 3 2022/12/23 08:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Javaの問題なのですが、「3文字...
-
excel vba 時間計算と条件分岐...
-
ダブルクォーテーションを含む...
-
実行シェルからCOBOLへパラメー...
-
直し方について教えて頂きたい...
-
JSPでの計算結果表示
-
VB6,論理演算子Orの使い方がわ...
-
DateTimePickerに値を入れたい...
-
wsprintf関数の使い方について
-
テキストボックスの数値チェック
-
getParameterの値変更
-
char型での演算子
-
struts ActionFormについて
-
Evaluate()に文字列の形式の数...
-
matchesを否定文として使う方法...
-
Stringクラスの変数の格納アド...
-
プログラミング言語で変数って...
-
String型の値が大文字か小文字...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションを含む...
-
wsprintf関数の使い方について
-
javaのCSVデータ読込についてです
-
ArrayListの要素数の上限
-
特定の文字列を複数抜き出した...
-
Stringクラスの変数の格納アド...
-
結合した文字列をファイル名に...
-
BCD形式で時刻を!
-
DateTimePickerに値を入れたい...
-
Evaluate()に文字列の形式の数...
-
実行シェルからCOBOLへパラメー...
-
hiddenの値を消したくない!
-
DOSバッチで変数の値を変数名に...
-
C言語の変数(LSB)の合わせ込...
-
excel vba 時間計算と条件分岐...
-
Javaの問題なのですが、「3文字...
-
matchesを否定文として使う方法...
-
8桁整数を限りなく短い文字列に...
-
JSPでの計算結果表示
-
指定した日付が何日前なのかを...
おすすめ情報