#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 好像也不行.
遇到这种位运算写一起的情况不知道咋办了.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.