int main(int argc, const char * argv[]) { int origin, bitmask,or,and,xor, not, nor, nand; origin = 0b0101; bitmask = 0b0001; or = origin | bitmask; // 0101 | 0001 = 0101 => 5 and = origin & bitmask; // 0101 & 0001 = 0001 => 1 xor = origin ^ bitmask; // 0101 ^ 0001 = 0100 => 4 not = ~origin; // ~0101 = 1010 => 8 + 2 = 10 ではない //1010は2の補数表現のとき最上位ビットが1の数は負となる //2の補数表現の直し方=1を引いて、全ての項を反転する //1010は1010-0001=1001を反転=0110=4+2=6だけど //最上位ビットが1だから負なので-6 //NORとNANDの演算子はない => ORの結果をNOTするかANDの結果をNOTする nor = ~or; // 0101 | 0001 = 0101 を反転 = 1010を2の補数表現とすると //1010-1=1001を反転して0110=4+2=6 負なので-6 nand = ~and; // 0101 0001 = 0001 を反転 = 1110を2の補数表現とすると // 1110-1=1101を反転して0010 = 2 負なので-2 printf("%d",or); printf("\n"); printf("%d",and); printf("\n"); printf("%d",xor); printf("\n"); printf("%d",not); printf("\n"); printf("%d",nor); printf("\n"); printf("%d",nand); printf("\n"); return 0; }