由于C++没有方便的直接显示整数二进制的函数。这里简单写了一个,希望这个工具对大家观察计算机中二进制的补码表示以及位运算有帮助。
代码还是用到了bitset做帮助,不过便于查看添加了每个字节之间的空格。算法控们可以不采用bitset,自己实现一个。
这里显示的都是补码,至于补码的规则,参考:http://blog.csdn.net/sheismylife/article/details/7626219
#include <iostream>
#include <fstream>
#include <sstream>
#include <bitset>
using namespace std;
string int32_bin_str(int x){
bitset<32> b(x);
string str = b.to_string();
stringstream stream;
for(int i=0;i<32;++i){
if((i % 8 ==0) && (i != 0)){
stream<<" ";
}
stream<<str[i];
}
return stream.str();
}
int main(int args,char* argv[]){
if(args!=2){
cout<<"execute \"show value\""<<endl;
return 1;
}
char* p = argv[1];
string pa = p;
cout<<"Input:"<<endl<<pa<<endl;
stringstream stream;
stream<<pa;
int x;
stream>>x;
bitset<32> b(x);
cout<<"Binary format:"<<endl<<int32_bin_str(x)<<endl;
}
执行程序:
chenshu@chenshu-beijing:~/work/research/binary/show/build/bin$ ./show 8
Input:
8
Binary format:
00000000 00000000 00000000 00001000
chenshu@chenshu-beijing:~/work/research/binary/show/build/bin$ ./show -8
Input:
-8
Binary format:
11111111 11111111 11111111 11111000
chenshu@chenshu-beijing:~/work/research/binary/show/build/bin$ ./show 1
Input:
1
Binary format:
00000000 00000000 00000000 00000001
chenshu@chenshu-beijing:~/work/research/binary/show/build/bin$ ./show -1
Input:
-1
Binary format:
11111111 11111111 11111111 11111111