#include <iostream>
using namespace std;

void main()
{
	/*********************************************
	* 算术运算符:+、-、*、/、%、++、--
	* 关系运算符:<、>、>=、<=、==、!=
	* 逻辑运算符:&&、||、!
	* 赋值运算符:+=、-=、*=、/=、%=、<<=(左移赋值)、>>=(右移赋值)、&=、|=、^=
	* 位运算符:&、|、~、^
	* 移位运算符:<<、>>
	*
	*********************************************/
	int i = 5, j = 8, k = 12, l = 4, x1, x2;
	x1 = i > j && k > l;
	x2 = !(i > j) && k > l;
	cout << x1 << endl << x2 << endl;

	// 位运算符
		// &:位逻辑与 两个二进制操作数从低位到高位对齐,每位求与,两数同位都为1,则得1,否则得0。
	//   0000 0000 0000 1100
	//  &0000 0000 0000 1000
	//   0000 0000 0000 1000
	
		// |:位逻辑或 两个二进制操作数从低位到高位对齐,每位求或,两数同位都为0,则得0,否则得1。
	//   0000 0000 0000 0100
	//  |0000 0000 0000 1000
	//   0000 0000 0000 1100

		// ^:位逻辑异或 两个二进制操作数从低位到高位对齐,每位求异或,两数同位不同时为1,则得1,否则得0。
	//   0000 0000 0001 1111
	//  ^0000 0000 0001 0110
	//   0000 0000 0000 1001

		// ~:取反运算符 将一个二进制操作数每一位,1变成0,0变成1
	//   ~1010 0011 1001 1011
	//    0101 1100 0110 0100

	// 移位运算符
	// <<:左移运算符 将二进制操作数按指定移动位数向左移,左边(高位端)溢出的位被丢弃,右边(低位端)的空位用0补充。
	//     左移位运算相当于乘以2的幂
	//  1010 0011 1001 1011 << 1
	//  0100 0111 0011 0110

	// >>:右移运算符 将二进制操作数按指定移动位数向右移,右边(低位端)溢出的位被丢弃,左边(高位端)的空位用0补充。
	//     右移位运算相当于除以2的幂
	//  1010 0011 1001 1011 >> 1
	//  0101 0001 1100 1101
}