No.5
- 回答日時:
いや、何も驚かれなくても。
ビットワイズ演算子というのは要するにビット演算子のことですよ。「C 言語にはない」というのは、確かに C には & という論理演算子がないという意味でもありますが、それ以前にそもそも C には boolean という型が存在しません。
で、Java に戻りますが、& と && の違いはニュアンスの違いというのもあると思います。
& の方は、純粋に論理的演算を行うというニュアンスです。つまり、int や long にも & というビット演算子があるのと同じように、boolean にも論理演算子があるということです。
&& の方は、条件分岐を行うための仕組みというニュアンスがあります。一つ目の条件が true のときだけ二つ目の条件を調べて、最終的に全体の結果を出す、ということです。
Java 言語ではこのニュアンスの違いが分かりにくいかもしれませんが、例えば JavaScript の & と && にはこの違いがはっきりと出ています。
No.3
- 回答日時:
評価が副作用を伴うときは結果が変わりますね。
boolean p() {
System.out.print(" test p");
return false;
}
boolean q() {
System.out.print(" test q");
return false;
}
のとき
if (p() && q()) {
...
}
だと「 test p」だけ印字されて
if (p() & q()) {
...
}
だと「 test p test q」と印字される。
例では単なる印字ですが、評価関数でオブジェクトの内部状態を変更するなどしている場合もありますので、状況によっては必ず両方を評価することが求められることもあります。
まあC言語にはないですし、絶対必須の機能じゃありません。
答えはやっぱりその辺ですか。
>>まあC言語にはないですし
ついさっき試しに、論理積に&の場合と&&の場合の場合のプログラムを作って動かしてみました。
javaと動きがどっちも同じような気がします・・・。
もしかしてCに&の論理演算子があったりするのでは?
No.2ベストアンサー
- 回答日時:
左の式がtrue、falseに関わらず右の式を評価したいときでしょう。
左の式がfalseのときに右の式を評価しても、論理演算の結果はfalseで変わらないですけど、
右の式に代入や関数呼び出しが含まれている場合は、代入や関数呼び出しが行われるか行われないかの違いが出てきます。
&や|や^は両方がint等ならビット演算子ですが、両方がbooleanなら論理演算子ですね。
つまり関数呼び出しが出来ないかもしれないので、
まず左で判定してから、関数を呼び出すのが&&演算子ですのね?
それじゃ、&だけなら、ないものを呼び出すことになるので、バグになる。
&演算子は動作を確認するためだけのもので、実際に動かすときは&&にするべきみたいなことなんでしょうか?
No.1
- 回答日時:
&は論理演算子ではないですよ。
ビット演算子と言います。例えば、masked = origin & 0xff00; // 下1バイト分をマスクする
bitset = origin | 0x0080; // 下1バイト目の最上位ビットをセットする
xored = origin ^ 0x0f; // 下4ビット分のビットを反転する
などの演算で、ビットマスク、ビットセット、ビット反転を行うために使用されます。if文などの中で使う論理演算子(&&や||)とはまったく別物で、ビット演算子は本来if文などの中で使うものではありません。
回答ありがとうございます。
しかしビット演算子にも&はありますが、論理演算子にも&はあります。
動作は簡単にいうと
&なら左の結果がfalseでも右もついでに判定する
&&は左の結果がfalseなら右は判定しない。
つまり自分的には
左の条件がA == NULLでfalseになったとき、
右がA.aaa() == 1みたいな事をしたらバグになるかならないかの違いだと思っているのですが・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 物理の証明問題についての質問です。 平面内を運動する小球がある。この物体にかかる加速度の方向と大きさ 2 2023/05/16 00:28
- 数学 『確率Ⅹ/2』 6 2022/11/21 00:00
- 化学 気体分子運動論の問題について質問です。 「水素原子の原子量は1.01です。0℃における水素分子(H₂ 2 2023/04/16 21:07
- 物理学 量子力学 生成消滅演算子 2 2022/08/04 23:17
- 糖尿病・高血圧・成人病 血液検査の実測値と理論値との相違 1 2022/10/06 09:31
- 宇宙科学・天文学・天気 AIが答えた方程式 1 2023/02/20 00:12
- 物理学 量子力学についていくつか質問があります。 まだ興味を持ち始めたばかりで、完全な物理未経験者のため、未 5 2022/10/25 18:11
- 数学 どっちと思いますか 4 2022/10/10 11:16
- その他(自然科学) 相対性理論と量子力学の統一の正体は、物質M±の変化進行形の性質に有る。とは思いませんか?? 1 2023/03/28 08:56
- 哲学 不毛な議論 8 2023/03/03 07:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
プログラミングで変数と関数の...
-
jsp~jspにhiddenを使って変数...
-
整数xxxが大き過ぎますというエ...
-
EXCEL/VBA 変数の値をクリップ...
-
verilog HDLの[=]と[<=]の使い分け
-
シェルスクリプトでPHPのchr()
-
構造体からレコードセットへの代入
-
[VBS]変数を定数に変換する方法...
-
テキストボックスの値を変数に...
-
datagridviewに行...
-
PL/Iについて、教えてください。
-
DataColumn型の使用方法
-
String型ローカル変数の初期化...
-
VBA 1行で複数の代入を行った...
-
ASP+SQLにてSessionがNullになる
-
C言語 exitの使い方
-
COLUMN(1:1)の意味を教え...
-
VB6.0-整数と余りを求める
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
-
EXCEL/VBA 変数の値をクリップ...
-
jsp~jspにhiddenを使って変数...
-
整数xxxが大き過ぎますというエ...
-
C言語 アロー演算子について質...
-
[VBS]変数を定数に変換する方法...
-
Variant型で宣言してるのにEmpt...
-
テキストボックスの値を変数に...
-
processing エラーで、 "cannot...
-
Accessコンボボックスにレコー...
-
DataTableの値を変数に代入したい
-
条件演算子 ? :
-
インクリメント演算子の前置(+...
-
プログラミングで変数と関数の...
-
gridViewの行選択解除
-
無名関数のメリットがよくわか...
-
stdpicture型の変数に、、
-
論理演算子について
-
COBOLの変数
おすすめ情報
