
どう直せばいいのでしょうか?
//statusは整数
if (((status and 3) > 0) or ((CBox.Checked = false)and(status and 12) > 0)) then begin
...
...
end;
//****************************
コンパイルすると以下のエラーが出ます。
[dcc32 エラー] : E2015 この型には指定した演算子は使えません
[dcc32 警告] : W1023 符号付きの型と符合なしの型を比較しています (両オペランドを拡張しました)
No.2ベストアンサー
- 回答日時:
Delphi自体は使っていませんが。
コンピュータになったつもりで、式を確認してみましょう
一番内側の括弧から、別の文字に書き換えていきます
※ A := (status and 3) とする(整数)
※ B := (CBox.Checked = false) とする(Boolean)
※ C := (status and 12) とする(整数)
((A > 0) or (B and C > 0))
※ D:= (A>0) とする(Boolean)
※ E:= (B and C > 0) とする (?)
(D or E)
この条件式は、上記のように解釈されて真偽を求めます。
おそらく、問題は (B and C > 0) 、つまり((CBox.Checked = false)and(status and 12) > 0)の部分です。
B and C > 0
は、2通りの解釈ができます。
(B and C) > 0
※ and の方が > より優先順序が高い、または、同じ優先順位え左から解釈することになっている
B and (C > 0)
※ > の方が and より優先順序が高い
優先順位は、例えば、足し算と掛け算が同列に並んでいたら、掛け算を先にする、とか言ったのと同じものです。
Delphiのマニュアルで、演算子の優先順位を調べてくだあい。
and の方が > より優先順序が高いのでは?
それだと、 (B and C) > 0 と解釈されています。
Booleanと整数 の and を計算しようとします。
このような優先順位や、Booleanと整数の演算、といったことは、言語によって異なります。
マニュアルを確認しましょう。
あやしいときは、括弧で明示的に順位を付けることです。
回答ありがとうございます。
if (((status and 3) > 0) or ((CBox.Checked = false)and((status and 12) > 0))) then begin
とすることでコンパイルできるようになりました。
(status and 12) > 0)) -->((status and 12) > 0)))
演算子の優先順位はわかっていたつもりだったんですけど、意図したとおりにかけていませんでした。
わかりやすい説明ありがとうございました。
No.3
- 回答日時:
回答ありがとうございます。
if (((status and 3) > 0) or ((CBox.Checked = false)and((status and 12) > 0))) then begin
とすることでコンパイルできるようになりました。
(status and 12) > 0)) -->((status and 12) > 0)))
演算子の優先順位はわかっていたつもりだったんですけど、意図したとおりにかけていませんでした。
No.1
- 回答日時:
手元にコンパイラ環境が無いので確認していませんが、これでいけませんか?
if (((status and 3) <> null) or ((CBox.Checked = false)and(status and 12) <> null)) then begin
...
...
end;
回答ありがとうございます。
if (((status and 3) > 0) or ((CBox.Checked = false)and((status and 12) > 0))) then begin
とすることでコンパイルできるようになりました。
(status and 12) > 0)) -->((status and 12) > 0)))
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Excel(エクセル) R列の1111/11/11以外、且つQ列の×の条件で該当行のAからAE列までオレンジに塗りつぶす 2 2022/07/02 10:18
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Visual Basic(VBA) Excel VBAの解読について質問があります。 概要は、マクロでチェックボックスにチェックすると日 1 2023/02/10 07:50
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
初歩的な質問ですが・・・
-
プロシージャ名のところでエラ...
-
End Sub が必要です。
-
intel fortranのエラーで困って...
-
構造体のポインタ参照
-
Delphiでif文がうまく書けないです
-
フォートラン(fortran)のエラー...
-
エクセルで特定の列が0表示の場...
-
特定のPCだけ動作しないVBAマク...
-
教えて下さい
-
UserForm1.Showでエラーになり...
-
配列数式の解除
-
ExcelのVBA。public変数の値が...
-
【Access】Excelインポート時に...
-
一つのTeratermのマクロで複数...
-
マクロの連続印刷が突然不可能...
-
メッセージボックスのOKボタ...
-
Excel・Word リサーチ機能を無...
-
オートフィルターとExcelマクロ...
-
Excel マクロ VBA プロシー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
Excel VABについて 下記記述が...
-
フォートランのエラーについて...
-
typedef による2重定義
-
AccessVBAでVLookupを使いたい
-
C# IEnumerable が IEnumerable...
-
intel fortranのエラーで困って...
-
Excel VBA: UserForm.Show で実...
-
Delphiでif文がうまく書けないです
-
フォートラン(fortran)のエラー...
-
他クラスからForm1内コントロル...
-
コンパイルで未定義のシンボル
-
fortran 配列宣言のオーバーフ...
-
VBでエラー'ActiveX component ...
-
DLL内からの外部変数の参照
-
ユニティ(unity)です。プログ...
-
(fortran) run-time erro M620...
-
構造体のポインタ参照
-
Mac OSX上でFortranを使いたい
-
C言語における定数の使用方法
おすすめ情報