logical and: inputs > output 0 0 0 1 0 0 0 1 0 1 1 1 logical or: inputs > output 0 0 0 1 0 1 0 1 1 1 1 1 logical exclusive or: inputs > output 0 0 0 1 0 1 0 1 1 1 1 0 ones complement: inputs > output 0 1 1 0 shift right (shift off the least significant bit): 10001011 >> 01000101 shift left: 101011 << 010110 Example: example.exe 0 0 00000000 & 00000000: 00000000 00000000 | 00000000: 00000000 00000000 ^ 00000000: 00000000 ~(00000000): 11111111 example.exe 1 1 00000001 & 00000001: 00000001 ece-000_[1]: example.exe 1 1 a long integer is 8 bytes a = 1, b = 1 a & b = 1 a | b = 1 a ^ b = 0 ~a = -2 ece-000_[1]: example.exe 1 2 1: 00000001 2: 00000010 a long integer is 8 bytes a = 1, b = 2 a & b = 0 a | b = 3 a ^ b = 3 ~a = -2 0001 2 = 00000010 ece-000_[1]: example.exe 2 4 2: 00000010 4: 00000100 a = 2, b = 4 a & b = 0 a | b = 6 a ^ b = 6 ~a = -3 MASKS: v argv[1] = 01011100 = 0*2^0 + 0*2^1 + 1*2^2 + 1*2^3 + 1*2^4 + 1*2^6 = 0 + 0 + 4 + 8 + 16 + 64 = 92 argv[2] = 00010000 = 1*2^4 = 16 argv[1] & argv[2] = 00010000 = 16