#include<bits/stdc++.h> using namespace std; #define uc unsigned char char cal(char c,int k){ return (c>>(7-k))&1; } void print(char c){ for(int i = 0;i < 8;++i) cout << (int)(cal(c,i)); } int main(void){ uc a = 'c'; cout << "a 二进制表示: ";print(a);cout << endl; uc b = (a<<2)>>2; cout << "b 二进制表示: ";print(b);cout << endl; uc c = a<<2; cout << "c 二进制表示: ";print(c);cout << endl; uc d = c>>2; cout << "d 二进制表示: ";print(d);cout << endl; return 0; } 输出结果
a 二进制表示: 01100011 b 二进制表示: 01100011 c 二进制表示: 10001100 d 二进制表示: 00100011 在 b 的定义中左移右移写一起,因为逻辑右移,前面应该补 0 然而没有.
分开写就行了
编译器 TDM-GCC 4.9.2 64-bit Release
怎么取消它的优化呢?-O0 好像也不行.
遇到这种位运算写一起的情况不知道咋办了.
