ないとき、私はなぜ0xF00は、12月は0
BOOL x = (BOOL)0xF00;
値0xF00
が非ゼロである... NO
であるが、それでも結果はNO
が、これであることを発見NO、と解釈されます私のパラダイムを吹き飛ばして、BOOLはうまくいくはずです
NO == 0, YES == any other value
なぜそれはそうですか?そのことを意味するのですか?
if (object) {}
は安全ではありませんか?
ないとき、私はなぜ0xF00は、12月は0
BOOL x = (BOOL)0xF00;
値0xF00
が非ゼロである... NO
であるが、それでも結果はNO
が、これであることを発見NO、と解釈されます私のパラダイムを吹き飛ばして、BOOLはうまくいくはずです
NO == 0, YES == any other value
なぜそれはそうですか?そのことを意味するのですか?
if (object) {}
は安全ではありませんか?
BOOL
は8ビットの符号付き文字として定義されています。しかし、0xF00
には8ビット以上が必要です。だから、コンパイラは、私はそれをしようとすると、0の値を持つ下位8ビットを、取っている、コンパイラは、特にこの問題について警告:
warning: implicit conversion from 'int' to 'BOOL' (aka 'signed char') changes value from 3840 to 0 [-Wconstant-conversion]
あなたはBOOL
変数に任意の値を代入するつもりなら、どのように値が表現されるかを説明する必要性についてのあなたのパラダイム。 1つのバイト値へのキャスト
'if(object){}'のチェックが安全でないことを意味しますか? –
'if'チェックが異なって動作するので、' object'がnilかどうかチェックすることは安全です。 if(object!= nil){}を書いた方がはっきりしています。どのような方法で –
、 'if'は異なった働きをしますか? –
は、すべての上位ビットを切り捨て...あなたはこのかかわらを行うことができます...
BOOL boolyValue = !!0xffff00;
'_Bool'はそのように動作しますが、' BOOL'にはありません。 –
も参照してください:[BNRのブログのBOOLのシャープコーナー](https://www.bignerdranch.com/blog/bools-sharp-corners/) –
アップルはなぜ3年前にiOSでそれを修正したのですか?それはMacOSでやったの?それは私には意味がありません。 – vitormm