Q5.6

来源:互联网 发布:linux日志管理系统 编辑:程序博客网 时间:2024/06/10 15:22
#include <iostream>using namespace std;void print_binary(int x){    string s = "";    for(int i=0; i<32 && x!=0; ++i, x >>= 1){        if(x&1) s = "1" + s;        else s = "0" + s;    }    cout<<s<<endl;}int bit_swap(int a){return (a & 0x55555555) << 1 | (a & 0xaaaaaaaa) >> 1; }int main(void){int a = -2;cout << "a:" << a << endl; print_binary(a);cout << "after bit_swap: " << bit_swap(a) << endl;print_binary(bit_swap(a));cout << "*************************************************" << endl << endl;//int test = -2;//print_binary(test);//cout << test << endl << endl;cout << "间接输出: " << endl;cout << "1. c = -2 & 0xaaaaaaaa" << endl;int c = -2 & 0xaaaaaaaa;print_binary(c);//cout << c << endl << endl;cout << "2. d = c >> 1" << endl;int d = c >> 1;print_binary(c >> 1);     cout << endl;            //有符号数右移,高位补1 //cout << d << endl;//cout << bit_swap(a) << endl;cout << "直接输出:(-2 & 0xaaaaaaaa) >> 1" << endl;  //仅有31位,说明最高位为0,验证了Hawstain的说法:(x & 0xAAAAAAAA) 得出的结果是无符号数 //无符号数右移,最高位补0 print_binary((-2 & 0xaaaaaaaa) >> 1);return 0;}


结果如下:



0 0