ビット演算について
以下のプログラムを作成して、int型、char型、long型のAND演算・OR演算の結果の違いを見ました。
実行結果からchar型だけ結果の表示の仕方が他と異なっています。
一般的に、バイト数では、
char(1バイト) < short(2バイト) < int(4バイト)
のはずなのに、出力結果は、
char(0xffffffff) > short(0xff) = int(0xff)
となっていて、charが一番大きく?、shortとintが同じ結果?
のようにみえてしまいよくわかりません。
私は、ビット演算が苦手なので、根本的に考え方が間違っているのかも
しれませんが、どうしてこのような出力結果となるのか教えてください。
プログラム
#include <stdio.h>
#include <stdlib.h>
int main()
{
int xi = 0x7F, yi=0x80;
int stri1 = xi&yi;
int stri2 = xi|yi;
printf("** int **\n");
printf("%p\n",stri1);
printf("%p\n\n",stri2);
char xc = 0x7F, yc=0x80;
char strc1 = xc&yc;
char strc2 = xc|yc;
printf("** char **\n");
printf("%p\n",strc1);
printf("%p\n\n",strc2);
short xl = 0x7F, yl=0x80;
short strl1 = xl&yl;
short strl2 = xl|yl;
printf("** short **\n");
printf("%p\n",strl1);
printf("%p\n\n",strl2);
return(0);
}
出力結果
** int **
0x0
0xff
** char **
0x0
0xffffffff
** short **
0x0
0xff
お礼
なるほど。ありがとうございます。 『~』…NOT、『^』…XORを利用すればいいんですね。 1行というのに悩まされましたが解決できました。 ビット演算子のとこがあまりわからなくて。。。 ありがとうございます。