初心者質問ですいません。
OSX 10.13.1, gcc 4.2.1 で動作させています。
C
1#include <stdio.h> 2#include <stdint.h> 3 4int main( void ) { 5 if (( ~((uint8_t)0 )) == (uint8_t)0xFF ) { 6 printf( "DIRECT : TRUE\n" ); 7 } 8 else { 9 printf( "DIRECT : FALSE\n" ); 10 } 11 uint8_t val = ~((uint8_t)0 ); 12 if ( val == (uint8_t)0xFF ) { 13 printf( "VARIABLE : TRUE\n" ); 14 } 15 else { 16 printf( "VARIABLE : FALSE\n" ); 17 } 18} 19
上記の記述を実行した時に、結果が
DIRECT : FALSE VARIABLE : TRUE
となりました。'0'を(uint8_t)でキャストしたものをさらに''で反転したのだから、型uint8_tとの比較になって、DIRECTの方もTRUEになるかと思ったのですが、そうではありませんでした。((uint8_t)0 )'のような固定値は、型がないのでしょうか。それともビット反転した際に型が崩れてしまうのでしょうか。このような結果は仕様的にどのような説明になるのでしょうか。
'
ちなみに
C
1 if ((uint8_t)( ~((uint8_t)0 )) == (uint8_t)0xFF ) {
のようにビット反転のさらに外側でキャストするとTRUEとなります。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/15 12:31
2018/02/15 12:47