// 源码反码补码
#include <iostream>
#include <bitset>

using namespace std;

int main()
{
    int z = -9;
    cout << bitset<8>(z) << endl;
    cout << bitset<8>(z >> 1) << endl; // 右移一位，符号位不变，左边补1
    cout << bitset<8>(z << 1) << endl; // 左移一位，符号位不变，右边补0
    cout << dec << z << endl;          // 十进制
    cout << oct << z << endl;          // 八进制
    cout << hex << z << endl;          // 十六进制

    signed int x = 20;
    cout << bitset<8>(x) << endl;
    cout << bitset<8>(x >> 1) << endl; // 右移一位，符号位不变，左边补0
    cout << bitset<8>(x << 1) << endl; // 左移一位，符号位不变，右边补0

    return 0;
}