約 2,182,416 件
https://w.atwiki.jp/yokkun/pages/499.html
量子力学の基本定理証明における2つの表現(覚え書き) エルミート演算子の固有値の実数性,異なる固有値に対する固有関数の直交性…という基本定理の証明における,2つの表記法(積分表記,ブラケット表記)を比較する。 【定理】 エルミート演算子の固有値は実数である。また,異なる固有値に対する固有関数は互いに直交する。 【証明】 エルミート演算子について,固有値方程式を とすると, …(i) 交換すると, 両辺のエルミート共役をとると,のエルミート性より …(ii) (i)(ii)を辺々引いて, のとき, すなわち は実数。 かつ のとき, すなわち,異なる固有値に対する固有関数は互いに直交する。(証明終)
https://w.atwiki.jp/biones/pages/23.html
場の量子論 1章 予備知識 1.1 量子力学の復習 1.2 特殊相対論の復習 1.3 場の解析力学 2章 場の量子化 2.1 場の量子論の事はじめ 2.2 実クラインゴルドン場 2.3 ディラック場 2.4 電磁場 3章 経路積分1章 予備知識 1.1 量子力学の復習 簡単な復習と、後で使う公式の説明をします。 ・系の”状態”をヒルベルト空間(ベクトル空間に完備性と内積を定義したもの)上のベクトルで表し のように表す。なぜそんな事をするのか? それは、ただ単に都合よく表現できるから。 例えば、1次元空間上の粒子の座標だけの”状態”を表すのであれば、実数xで物足りる。 量子論はもっと複雑なので、ベクトルで表現したほうが都合が良いのである。 蛇足) 状態ベクトルの理解は、幾何ベクトルのイメージが役に立つと思う。 すなわち、ベクトルの向きが状態に対応しているとイメージするのである。 ・物理量をは、エルミート演算子で表す。 エルミート演算子とは を満たすものをいう。この要請は、物理量が実数である事を要求するためである。 ・状態の時間発展はシュレディンガー方程式に従う。(シュレディンガー描像の場合) ココで、Hはハミルトニアンを量子化したものである。 ・物理量の期待値は で得られる。ただし、ノルムは規格化されているとする。 状態を|x>に内積したものを位置表示の波動関数と呼ぶ。 同様に運動量pを変数にとる状態ベクトル|p に内積したものを運動量表示の波動関数という。 両者の関係は ・正準量子化 量子化は次式の交換関係に従う。 座標表示では、 とし、確かにこれは上の交換関係を満たす。 ・重要な公式 ・エルミート演算子の異なる固有ベクトルは直行する。 すなわち 連続変数の場合、上のアナロジーでδ関数を用いて とする。 iは自然数 証明) 任意のベクトルをかけると となり、変わらないことがわかる。 ・qを連続変数として、 証明) 証明) 最後=の微分方程式を解けば上式がえられる。 ・調和振動子 調和振動子のハミルトニアンは で与えられる。 ここで、新たに生成、消滅演算子というものを定義する2章 場の量子化 ここからは、自然単位系を使いますh=c=1 2.1 場の量子化ことはじめ 清水明さんの量子論の基礎の7章が凄くわかりやすいです。 量子力学は、基本変数に”粒子の”座標pと運動量qを取りましたが、これを場に適用しようとするのは、ごく自然な発想です。すなわち、粒子が古典論で記述できないのならば、場も記述できないであろうということです。 そこで、粒子の場合のアナロジーとして、場の関数(便宜上スカラー場φとします)を量子化します。 物理学では、何を原理に持ってくるかは理論が同値であれば一向に構わないのですが、一番スマートな方法はやはり最小作用の原理でしょう。 すなわち、系を一つのラグランジアンLという関数によって記述し、その作用が0になるという事を”原理”とします。 要請としては、ラグランジアンは場の関数と、その時間の1階微分のみ含むとします。空間微分は、各点でφが定まっているので、(異常な空間でなければ)常に計算可能です。 ここで、ラグランジアン密度というものを定義する。 そうすれば、作用は一般的に と、4次元の空間積分になり、相対論的見通しがよくなる。 次に、解析力学と同じく、場の一般化運動量(密度)を定義する。(粒子の解析力学でも、運動量の一般的な定義はラグランジアンを速度で微分したものでしたね) 右辺は汎関数微分といって、関数を関数で微分しています。詳しい説明は力学のページで(未定な予定><)。 汎関数微分には次の性質があります より がいえます。 粒子の解析力学と同様に、ハミルトニアンも定義する。 とし、(右辺の中はハミルトニアン密度) Hの自然な変数は、φとπになります。 ・場の量子化 正準量子化では を要請しました。 場の量子論では、基本変数を場に選びます。 すなわち、 x ⇒ φ p ⇒ π 基本変数を区別する添え字(1粒子だったら1-3とか)は、 j ⇔ r となり、無限自由度になります。3章 経路積分 3.1 経路積分入門 目的は、時間t0の状態からの確率振幅を求めることです。 厳密な導出はしないです。 ハミルトニアンの演算子の順序に関する議論も全くしていません。 とりあえず、仮定は ・ハミルトニアンHは時間に依存しないと仮定し、更にT+V=Eと書ける。 と書き、ファインマン核と呼びます。 時間推進演算子Uを導入する。 この演算子は状態をに移す。 確率は保存するので、Uは明らかにユニタリである。 シュレディンガー方程式が成り立つことより 時間推進演算子について が成り立つ。 また、 は明らかである。 次のステップとして、次のように時間を離散化する。 ・ ・ ・ ただし、Δtは無限微小時間。 Uを微小時間についてテイラー展開して よって、次式が成り立つ ファインマン核 の間に完全性を大量にぶち込む。 各微小区間は上の結果を使って を仮定すれば、δ関数のフーリエ表現 と、上の公式 を駆使して Tの項は ポテンシャル項は よって、微小ファインマン核は 3行目では、1-H⊿tを再び指数関数にもどして、肩に上げて近似ました。 に代入して、Nを無限大に飛ばすと コレを新たに と書く。これを、位相空間での経路積分と呼ぶ。 また、指数関数の肩は作用積分(中身はラグランジアン)なので、 と、非常にシンプルに書ける。 3.2 ユークリッド経路積分
https://w.atwiki.jp/biones/pages/19.html
場の量子論 1章 予備知識 1.1 量子力学の復習 1.2 特殊相対論の復習 1.3 場の解析力学 2章 場の量子化 2.1 場の量子論の事はじめ 2.2 実クラインゴルドン場 2.3 ディラック場 2.4 電磁場 3章 経路積分1章 予備知識 1.1 量子力学の復習 簡単な復習と、後で使う公式の説明をします。 ・系の”状態”をヒルベルト空間(ベクトル空間に完備性と内積を定義したもの)上のベクトルで表し のように表す。なぜそんな事をするのか? それは、ただ単に都合よく表現できるから。 例えば、1次元空間上の粒子の座標だけの”状態”を表すのであれば、実数xで物足りる。 量子論はもっと複雑なので、ベクトルで表現したほうが都合が良いのである。 蛇足) 状態ベクトルの理解は、幾何ベクトルのイメージが役に立つと思う。 すなわち、ベクトルの向きが状態に対応しているとイメージするのである。 ・物理量をは、エルミート演算子で表す。 エルミート演算子とは を満たすものをいう。この要請は、物理量が実数である事を要求するためである。 ・状態の時間発展はシュレディンガー方程式に従う。(シュレディンガー描像の場合) ココで、Hはハミルトニアンを量子化したものである。 ・物理量の期待値は で得られる。ただし、ノルムは規格化されているとする。 状態を|x>に内積したものを位置表示の波動関数と呼ぶ。 同様に運動量pを変数にとる状態ベクトル|p に内積したものを運動量表示の波動関数という。 両者の関係は ・正準量子化 量子化は次式の交換関係に従う。 座標表示では、 とし、確かにこれは上の交換関係を満たす。 ・重要な公式 ・エルミート演算子の異なる固有ベクトルは直行する。 すなわち 連続変数の場合、上のアナロジーでδ関数を用いて とする。 iは自然数 証明) 任意のベクトルをかけると となり、変わらないことがわかる。 ・qを連続変数として、 証明) 証明) 最後=の微分方程式を解けば上式がえられる。 ・調和振動子 調和振動子のハミルトニアンは で与えられる。 ここで、新たに生成、消滅演算子というものを定義する2章 場の量子化 ここからは、自然単位系を使いますh=c=1 2.1 場の量子化ことはじめ 清水明さんの量子論の基礎の7章が凄くわかりやすいです。 量子力学は、基本変数に”粒子の”座標pと運動量qを取りましたが、これを場に適用しようとするのは、ごく自然な発想です。すなわち、粒子が古典論で記述できないのならば、場も記述できないであろうということです。 そこで、粒子の場合のアナロジーとして、場の関数(便宜上スカラー場φとします)を量子化します。 物理学では、何を原理に持ってくるかは理論が同値であれば一向に構わないのですが、一番スマートな方法はやはり最小作用の原理でしょう。 すなわち、系を一つのラグランジアンLという関数によって記述し、その作用が0になるという事を”原理”とします。 要請としては、ラグランジアンは場の関数と、その時間の1階微分のみ含むとします。空間微分は、各点でφが定まっているので、(異常な空間でなければ)常に計算可能です。 ここで、ラグランジアン密度というものを定義する。 そうすれば、作用は一般的に と、4次元の空間積分になり、相対論的見通しがよくなる。 次に、解析力学と同じく、場の一般化運動量(密度)を定義する。(粒子の解析力学でも、運動量の一般的な定義はラグランジアンを速度で微分したものでしたね) 右辺は汎関数微分といって、関数を関数で微分しています。詳しい説明は力学のページで(未定な予定><)。 汎関数微分には次の性質があります より がいえます。 粒子の解析力学と同様に、ハミルトニアンも定義する。 とし、(右辺の中はハミルトニアン密度) Hの自然な変数は、φとπになります。 ・場の量子化 正準量子化では を要請しました。 場の量子論では、基本変数を場に選びます。 すなわち、 x ⇒ φ p ⇒ π 基本変数を区別する添え字(1粒子だったら1-3とか)は、 j ⇔ r となり、無限自由度になります。3章 経路積分 3.1 経路積分入門 目的は、時間t0の状態からの確率振幅を求めることです。 厳密な導出はしないです。 ハミルトニアンの演算子の順序に関する議論も全くしていません。 とりあえず、仮定は ・ハミルトニアンHは時間に依存しないと仮定し、更にT+V=Eと書ける。 と書き、ファインマン核と呼びます。 時間推進演算子Uを導入する。 この演算子は状態をに移す。 確率は保存するので、Uは明らかにユニタリである。 シュレディンガー方程式が成り立つことより 時間推進演算子について が成り立つ。 また、 は明らかである。 次のステップとして、次のように時間を離散化する。 ・ ・ ・ ただし、Δtは無限微小時間。 Uを微小時間についてテイラー展開して よって、次式が成り立つ ファインマン核 の間に完全性を大量にぶち込む。 各微小区間は上の結果を使って を仮定すれば、δ関数のフーリエ表現 と、上の公式 を駆使して Tの項は ポテンシャル項は よって、微小ファインマン核は 3行目では、1-H⊿tを再び指数関数にもどして、肩に上げて近似ました。 に代入して、Nを無限大に飛ばすと コレを新たに と書く。これを、位相空間での経路積分と呼ぶ。 また、指数関数の肩は作用積分(中身はラグランジアン)なので、 と、非常にシンプルに書ける。 3.2 ユークリッド経路積分
https://w.atwiki.jp/javamock/pages/47.html
ビット演算子 Javaにおいてビット演算子とはビット単位の操作を行うための演算子です。 ビット演算子には以下の演算子を使います。 ビット演算子 使用例 機能 A B Aを右にBビットシフト A B Aを左にBビットシフト A B Aを右にBビット論理シフト & A & B AとBについてビットごとのAND | A | B AとBについてビットごとのOR ^ A ^ B AとBについてビットごとの排他的OR ~ ~A Aについてビットごとの反転 ビット演算子 bit operator // bitwise operator bit ビット、2進数(binary number)の単位【語源】binary digitの略 bitwise ビット単位の、ビット位置の、ビットごとの binary 2値の、2進法の digit (アラビア)数字、〔数字の〕けた らしいです。 ビット演算子 使用例 1 BitOperatorSample1.java class BitOperatorSample1 { public static void main(String[] args) { // 0001 0000 byte byteOperand = 16; byte shiftOperand = 2; // 0001 0000 → 0000 0100 System.out.println("byteOperand shiftOperand " + (byteOperand shiftOperand)); // 0001 0000 → 0100 0000 System.out.println("byteOperand shiftOperand " + (byteOperand shiftOperand)); } } 実行結果 C \java javac BitOperatorSample1.java C \java java BitOperatorSample1 byteOperand shiftOperand 4 byteOperand shiftOperand 64 ビット演算子 使用例 2 BitOperatorSample2.java class BitOperatorSample2 { public static void main(String[] args) { // 1111 1111 1111 1111 1111 1111 1111 int intOperand = -1; /* * 1111 1111 1111 1111 1111 1111 1111 → 0011 1111 1111 1111 1111 1111 1111 1111 * (2の30乗-1=1073741823) */ System.out.println("intOperand 2 " + (intOperand 2)); } } 実行結果 C \java javac BitOperatorSample2.java C \java java BitOperatorSample2 intOperand 2 1073741823 ビット演算子 使用例 3 BitOperatorSample3.java class BitOperatorSample3 { public static void main(String[] args) { int intOperand1 = 19; int intOperand2 = 21; System.out.println(intOperand1 + " " + Integer.toBinaryString(intOperand1)); System.out.println(intOperand2 + " " + Integer.toBinaryString(intOperand2)); System.out.println("19 21 " + Integer.toBinaryString(intOperand1 intOperand2)); System.out.println("19 | 21 " + Integer.toBinaryString(intOperand1 | intOperand2)); System.out.println("19 ^ 21 " + Integer.toBinaryString(intOperand1 ^ intOperand2)); System.out.println("~19 " + Integer.toBinaryString(~intOperand1)); } } 実行結果 C \java javac BitOperatorSample3.java C \java java BitOperatorSample3 19 10011 21 10101 19 21 10001 19 | 21 10111 19 ^ 21 110 ~19 11111111111111111111111111101100
https://w.atwiki.jp/bokuyo/pages/87.html
ビット演算子(C++) 8進数/16進数の表し方 int cloud = 0xFF7;//4087(d)の16進表記 int strife = 0234;//156(d)の8進表記 0x~で16進数表記、0~で8進数表記 NOT 演算 int eureka = ~ 7;//1000 (0111の否定) 論理積 (AND) int eureka = 7 7;//0111 0111 = 0111 int renton = 7 11;//0111 1011 = 0011 int rayout = 7 8;//0111 1000 = 0000 論理和 (OR) int eureka = 7 | 7;//0111 | 0111 = 0111 int renton = 9 | 2;//1001 | 0010 = 1011 int rayout = 3 | 12;//0011 | 1100 = 1111 排他的論理和 (XOR) int eureka = 7 ^ 7;//0111 ^ 0111 = 0000 int renton = 10^ 5;//1010 ^ 0101 = 1111 int rayout = 7 ^ 14;//0111 ^ 1110 = 1001 右シフト int eureka = 13 1;//01101 1 = 0110 int renton = 13 2;//01101 2 = 011 int rayout = 13 3;//01101 3 = 01 1回右シフトすると1/2倍、2回で1/4倍、3回で1/8倍…、と1/(2のn乗)倍する演算子。あまりは切り捨て。 std cinではこれを演算子オーバーロードしてるわけです。 左シフト int eureka = 3 1;//011 1 = 0110 int renton = 3 2;//011 2 = 01100 int rayout = 3 3;//011 3 = 011000 1回左シフトすると、2倍、2回で4倍、3回で8倍…、と2のn乗倍できる便利な演算子。 std coutではこれを演算子オーバーロードしてるわけです。
https://w.atwiki.jp/shinobu2/pages/38.html
整数の値に対してビット単位で処理を行うために用意されているのがビット演算子です。次の演算子が用意されています。 演算子 使用例 意味 a 0xFF00FF00 a と 0xFF00FF00のビットAND l a l 0xFF00FF00 a と OxFF00FF00のビットOR ^ a ^ 0xFF00FF00 a と OxFF00FF00のビットXOR ~ a a のビット反転(ビットNOT) a 3 a を 左へ3ビットシフト a 3 a を 右へ3ビットシフト(符号有り) a 3 a を 右へ3ビットシフト(符号無し) 数値を2進数の形式で表示し、各ビットに対して演算を行います。例えばint型は32ビットの値を取りますので次のように表示することができます。 0x3F30A5A5 0011 1111 0011 0000 1010 0101 1010 0101 ---- ---- ---- ---- ---- ---- ---- ---- 3 F 3 0 A 5 A 5 0x3F30A5A5という16進数で表記されたint型の数値は2進数で表すと00111111001100001010010110100101となります。ビット演算子を使用すると2進数で表された各ビットに対して操作を行う事ができます。 では順に確認していきます。(int型だと面倒なので8ビットのbyte型を使って確認していきます)。 ※「 」「 」「 」の3つの演算子については次のページで説明します。 ビットAND ビットANDは演算子の左辺と右辺の同じ位置にあるビットを比較して、両方のビットが共に「1」の場合だけ「1」にします。次の例を見てください。 byte b; b = 0x55 0x0F; 変数「b」には0x55と0x0FのビットANDした結果が代入されます。この時、次のような処理が行われます。 01010101 = 0x55 00001111 = 0x0F -------- 00000101 = 0x05 0x55と0x0Fをそれぞれ2進数で表します。そして各ビットを比較し両方のビットが「1」の場合だけ「1」となり、それ以外の場合は全て「0」となります。結果として00000101(0x05)という値が変数「b」には代入されることになります。 ビットOR ビットORは演算子の左辺と右辺の同じ位置にあるビットを比較して、どちらか一つでもビット「1」の場合に「1」にします。次の例を見てください。 byte b; b = 0x55 | 0x0F; 変数「b」には0x55と0x0FのビットORした結果が代入されます。この時、次のような処理が行われます。 01010101 = 0x55 00001111 = 0x0F -------- 01011111 = 0x5F 0x55と0x0Fをそれぞれ2進数で表します。そして各ビットを比較しどちらかのビットが「1」の場合は「1」に、両方のビットが「0」の場合は「0」にします。結果として01011111(0x5F)という値が変数「b」には代入されることになります。 ビットXOR ビットXORは演算子の左辺と右辺の同じ位置にあるビットを比較して、どちらかのビットが一つだけ「1」の場合に「1」にします。次の例を見てください。 byte b; b = 0x55 ^ 0x0F; 変数「b」には0x55と0x0FのビットXORした結果が代入されます。この時、次のような処理が行われます。 01010101 = 0x55 00001111 = 0x0F -------- 01011010 = 0x5A 0x55と0x0Fをそれぞれ2進数で表します。そして各ビットを比較しどちらかのビット一つだけが「1」の場合には「1」に、両方のビットが「1」であるか両方のビットが「0」の場合は「0」にします。結果として01011010(0x5A)という値が変数「b」には代入されることになります。 ビットNOT ビットNOTは演算子の右辺の値の各ビットを反転(0なら1に、1なら0にする)させます。次の例を見てください。 byte b; b = ~0x55; 変数「b」には0x55をビットNOTした結果が代入されます。この時、次のような処理が行われます。 01010101 = 0x55 -------- 10101010 = 0xAA 0x55を2進数で表します。そして各ビットを「0」なら「1」に、「1」なら「0」にします。結果として10101010(0xAA)という値が変数「b」には代入されることになります。 わからないところがあったら以下に書き込んでください。 test -- (test) 2010-12-10 22 01 03 テスト -- (test) 2010-12-10 23 00 34 hosei -- (HOSEI) 2011-01-31 14 10 34 test -- (名無しさん) 2011-01-31 14 10 53 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/shinobu2/pages/39.html
ビット演算子の中でも下記の3つはシフト演算子と呼ばれることもあります。 演算子 使用例 意味 a 3 a を 左へ3ビットシフト a 3 a を 右へ3ビットシフト(符号有り) a 3 a を 右へ3ビットシフト(符号無し) これらの3つの演算子は対象の値の各ビットを右または左へシフトします。 10進数で右または左へ数値をシフトした場合、それは数値を1/10にしたり10倍することを意味します。例えば1230を左へシフトして12300とすれば10倍したことになりますし、右へシフトして123とすれば1/10になったこととなります。同じように2進数でシフトした場合は1/2にしたり2倍したりすることを意味します。 では順に確認していきます。(int型だと面倒なので8ビットのbyte型を使って確認していきます)。 左シフト 対象の値を指定した数だけ左へシフトします。次の例を見てください。 byte b; b = 0x15 2; 変数「b」には0x15を左へ2つシフトした値が代入されます。この場合は次のような処理が行われます。 00010101 = 0x15 -------- 00101010 = 左へ1つシフト 01010100 = 左へ2つシフト 0x15を左へ2つシフトすると01010100(0x54)となります。左へシフトする場合、左側からはみ出たビットは捨てられ、シフトしたことによて空いた右側には0が詰められます。 右シフト(符号有り) 対象の値を指定した数だけ右へシフトします。次の例を見てください。 byte b; b = 0x2A 2; 変数「b」には0x2Aを右へ2つシフトした値が代入されます。この場合は次のような処理が行われます。 00101010 = 0x2A -------- 00010101 = 右へ1つシフト 00001010 = 右へ2つシフト 0x2Aを右へ2つシフトすると00001010(0x0A)となります。右へシフトする場合、右側からはみ出たビットは捨てられます。そしてシフトによって空いた左側には元のビットが1だった場合は1が詰められ、元のビットが0だった場合は0が詰められます。この結果、右シフトしても負の整数は符号がそのままで数値が1/2となります。 下記は最上位ビットが1だった場合の例です。 10100011 = 0xA3 -------- 11010001 = 右へ1つシフト 11101000 = 右へ2つシフト 右へシフトした時に空いた一番左側のビットには、シフトする前が1だったので1で詰められています。 右シフト(符号無し) 対象の値を指定した数だけ右へシフトします。 演算子との違いはシフト前の一番左のビットが何であっても右へシフトした時に一番左のビットは常に0で詰められます。次の例を見てください。 byte b; b = 0xA3 2; 変数「b」には0xA3を右へ2つシフトした値が代入されます。この場合は次のような処理が行われます。 10100011 = 0xA3 -------- 01010001 = 右へ1つシフト 00101000 = 右へ2つシフト 0x2Aを右へ2つシフトすると00101000(0x28)となります。この演算子の場合は、右シフトによって1/2となるということよりも純粋にビットを右へシフトさせたい場合などに使用されます。 わからないところがあったら以下に書き込んでください。 test -- (test) 2010-12-10 22 01 03 テスト -- (test) 2010-12-10 23 00 34 hosei -- (HOSEI) 2011-01-31 14 10 34 test -- (名無しさん) 2011-01-31 14 10 53 名前 コメント すべてのコメントを見る
https://w.atwiki.jp/slvip/pages/54.html
ビット演算子 一気に難しくなるかもしれないから これより前のがわかってなかったり 2進数ってのがわからなかったら見ないほうがいい ビット演算っていうのは2つある整数を2進数に直してから 決められた処理で 新しい値を出す 値を抜き出す 値を計算する その他いろいろ ってことを言うんだ それを出す記号は次の通り 記号 意味? AND | OR ^ XOR ~ NOT 右シフト 左シフト なんか前にもこんなの見なかった? たしかに論理演算と似てる記号があるけど 搾り出す数字は論理演算とはまったく違う値が出てくるんだ 使い方は論理演算と同じように2つの数値の間に挟んでやればいい 7 13 AND ここからが本題 簡単な説明方法が見つからなかったんで 適当に処理のされかたを説明していく まずはこれの両方の数値を 7 13 2進数に変えられる(8bitとして計算してみよう) 00000111 00001101 次にいよいよ 記号の出番 この記号は同じ数字の位の両方が1だった場合、新しい値の同じ位に1を、そうでなかったら0を 位ごとに論理演算をしてると思うといいよ 00000111 00001101 = 00000101 ここから出てきた値が再び10進数に直されて俺たちの画面に表示される つまり最終的に"5"が帰ってくる 途中の の処理をもう一度見てみよう 0 0 0 0 0 1 1 1 … 左 0 0 0 0 1 1 0 1 … 右 これの同じ位の数字でANDの処理をすると・・・ 0 0 0 0 0 1 1 1 … 左 AND AND AND AND AND AND AND AND 0 0 0 0 1 1 0 1 … 右 0 0 0 0 0 1 0 1 … 結果 こういうこと OR ORの計算に関しても同じように 00000111 | 00001101 と書く ORは同じ位の片方が1だったら1をってことで 00000111 | 00001101 = 00001111 こういう結果が返ってくる わかりやすく見るとこんなかんじ 0 0 0 0 0 1 1 1 … 左 OR OR OR OR OR OR OR OR 0 0 0 0 1 1 0 1 … 右 0 0 0 0 1 1 1 1 … 結果 これが10進数に直されて15が帰ってくる XOR XORっていうのは 同じ位の片方『だけが』1だったら1を返す わかりやすく見るとこんなかんじ 0 0 0 0 0 1 1 1 … 左 XOR XOR XOR XOR XOR XOR XOR XOR 0 0 0 0 1 1 0 1 … 右 0 0 0 0 1 0 1 0 … 結果 これが10進数に直されて10が帰ってくる NOT NOTっていうのは数値の直前に書いてやればいい ~9 逆にすればいいってことはこれはTRUEだからFALSEにすればいいわけ? ビット演算の場合はそう簡単にはいかないんだ ~9を例にしてみてみると まず2進数に変える 0 0 0 0 1 0 0 1 これの各位を逆に 1 1 1 1 0 1 1 0 つまり答えは246ってこと? 答えは-2 何でこうなるか パソコンは電気を「流しているか」「流していないか」 つまり「1」と「0」だけで処理をしてるんだ それでPCの中で2進数表現してるのはわかると思うけど それにマイナスを付け加えるのはどうやってるんだろう それはやっぱり人間と同じように数値の先頭に”マイナス”という目印を付けて 「これはマイナスの数だ!」って判断してるんだ パソコンがマイナスと判断する材料もやっぱり0か1で 変数に格納された値の先頭が1だった場合 その変数の値はマイナスというふうに考えてるというわけ ここで注意したいんだけど マイナスの数は少し変で -1という数を11111111という表現をするんだ どうしてこうなったかっていうと… たしか正の数を反転した数がそのままマイナスになるようにしたかったんじゃなかったっけ そうした時に 00000001を反転すると11111110になるんだけど そうなると11111111って数を使うとすると 0という数字が出来てしまうことになる(数学上こういう値は存在しない・・はず)ので 「このムダを無くそう!」ってなかんじから マイナスの値は 正の値のマイナス値 = NOT(正の値)+1 こんなかんじにして マイナスの値を11111111から始めるようにした …こんな感じだったと思う これの事を2の補数って言うんだ マイナスの値はこんな感じに書かれる 11111111 -1 11111110 -2 11111101 -3 11111100 -4 11111011 -5 シフト 右シフト・左シフトっていうのは 2進数に直した値の各位を横にずらすことを言うんだ 11 2 たとえばこの左シフト場合 11を2進数に直してから 00001011 各位を だから左に2ビットずらすって意味がある 00101100 これで出た答えが44 右シフトの書き方も同じ 11 1 たとえばこの左シフト場合 11を2進数に直してから 00001011 各位を だから左に1ビットずらす 00000101 これで出た答えが5 これらって何の意味があるの? ビット演算っていうのは普通にやる*とか+の計算より処理が軽いらしい それに使い方次第ですごく便利な物に変わる この処理を見てほしい a = 1; a |= 2; a |= 8; aに1を入れて aと2をOR演算したのをaに入れて 最後にaと8をOR演算したのをaに入れるというプログラム この状態でaの中は2進数であらわすとこんな感じになってる 00001011 これは各位を色んな条件と見立てて if(a 8){} といった感じで 00001011 と 00001000 を 0 0 0 0 1 0 1 1 AND AND AND AND AND AND AND AND 0 0 0 0 1 0 0 0 こんな感じでAND演算してるんだ つまり帰ってくるのは8 でTRUE もしも 00001011 これが a |= 8; この処理をされてなくて 00000011 こうだったら 0 0 0 0 0 0 1 1 AND AND AND AND AND AND AND AND 0 0 0 0 1 0 0 0 この処理を通した結果かえってくるのは0 =FALSE というわけでif文は実行されないって訳 どういうことかというと いちいちいくつも整数型の変数を作らなくても いくつもの条件を1つの変数で高速に済ませられるってわけだ 他にもシフト演算なんかは 2進数の「左に1ずれると元の数×2」という性質を使って integer a = 150; a = a 4; こうする事でaには150*(2^4)された値=2400が出てくる
https://w.atwiki.jp/yaruofullcourse/pages/149.html
ジュエルミート ─────────────────────────────────────── リーガルマンモスから取れる肉。詳しくは原作を読め。 DIOの適合食材でもある。
https://w.atwiki.jp/javamock/pages/39.html
演算子 演算子とは変数や定数を用いて基本的計算を行うための命令のことです。 また、この時の変数や定数のことを被演算子といいます。 演算子 operator オペレーター 被演算子 operand オペランド たとえば以下のような式は、operand1とoperand2が被演算子(オペランド)、+が演算子(オペレーター)ということになります。 operand1 + operand2 演算子は「1つの演算子に対して被演算子の扱う数」によって、分別されます。 単項演算子 1つの被演算子を扱います。 「 演算子 」 「 被演算子 」 「 被演算子 」 「 演算子 」 の形式になります。 operand++ --operand 二項演算子 2つの被演算子を扱います。 「被演算子」 「演算子」 「被演算子」 の形式になります。 operand + opreand 三項演算子 3つの被演算子を扱います。 「 被演算子 」 「 演算子 」 「 被演算子 」 「 演算子 」 「 被演算子 」 の形式になります。 operand ? oprand operand また、演算子の機能によっても分別されます。 演算子 機能 算術演算子 四則計算を行う 代入演算子 代入を行う 関係演算子 比較を行う 論理演算子 比較を行う 条件演算子 条件判定により値を返す ビット演算子 ビット単位の操作を行う その他 算術演算子について → 算術演算子 代入演算子について → 代入演算子 関係演算子について → 関係演算子 論理演算子について → 論理演算子 条件演算子について → 条件演算子 ビット演算子について → ビット演算子 new演算子について → new演算子 instanceof演算子について → instanceof演算子