位运算
#include <iostream>
using namespace std;
void print(int num)
{
for (int i = 31; i >= 0; i--)
{
//int有32位进制 0000 0000 0000 0000 0000 0000 0000 0000
//当i为31时,1<<到31位,1000 0000 0000 0000 0000 0000 0000 0000,
//<<左移运算符把数字左移到几位,"<<"左边是要移动的数字,"<<"右边是要移动的距离
//num在机器中是以二进制表示,与(1<<i) &运算。
// 比如最高位是0,与1 &运算为0, 0==0 则输出0,
cout << ((num & (1 << i)) == 0 ? "0" : "1") <<" ";
}
cout << endl;
}
void test01()
{
//32位
//int num = 100;
//print(num);
//print(num << 1);
//print(num << 2);
//print(num << 4);
//int b = 1241344;
取反
//int c = ~b;
//print(b);
//print(c);
//cout << INT_MIN << endl;
//cout << INT_MAX << endl;
int ddd = 1241354;
int eee = 1516161666;
print(ddd);
print(eee);
cout << "------------------------" << endl;
//或运算符,11为1,10为,01为1,00为0
print(ddd|eee);
//与运算11为1,10为0,01为0,00为0
print(ddd & eee);
//异或运算,11为0,00为0,10为1,01为1
print(ddd ^ eee);
//求值相反,两种方法
int mun1 = 5;
//"-"在底层的算术逻辑就是~+1, 负数和正数的在计算机底层的表示形式是不一样的,
//负数符号位是1,而正数的符号位是0,用~+1来计算的话,正负都能计算出正确的结果
//0的负数还是0,当~+1后,最高位进1,值溢出,抛弃,除非是long,那么值就不一样了
int num2 = -mun1;
cout << num2 << endl;
int nun2 = 5;
cout << ~nun2 + 1 << endl;
}
int main()
{
test01();
}