我需要使用二进制数.
我试着写道:
const x = 00010000;
但它没有起作用.
我知道我可以使用与00010000
具有相同值的十六进制数,但我想知道C++中是否有用于二进制数的类型,如果没有,是否有其他解决方案来解决我的问题?
我需要使用二进制数.
我试着写道:
const x = 00010000;
但它没有起作用.
我知道我可以使用与00010000
具有相同值的十六进制数,但我想知道C++中是否有用于二进制数的类型,如果没有,是否有其他解决方案来解决我的问题?
您可以在等待C++0x时 Select use BOOST_BINARY
.:)BOOST_BINARY
可以说比模板实现有优势,因为它是can be used in C programs as well(它是use BOOST_BINARY
%预处理器驱动的)
要进行相反的操作(即以二进制形式打印出一个数字),可以使用非便携式itoa
function或implement your own.
不幸的是,您不能使用STL流进行基数2格式化(因为setbase
只支持基数8、10和16),但是您can使用的是itoa
的std::string
版本,或者(更简洁,但效率略低的)std::bitset
.
#include <boost/utility/binary.hpp>
#include <stdio.h>
#include <stdlib.h>
#include <bitset>
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
unsigned short b = BOOST_BINARY( 10010 );
char buf[sizeof(b)*8+1];
printf("hex: %04x, dec: %u, oct: %06o, bin: %16s\n", b, b, b, itoa(b, buf, 2));
cout << setfill('0') <<
"hex: " << hex << setw(4) << b << ", " <<
"dec: " << dec << b << ", " <<
"oct: " << oct << setw(6) << b << ", " <<
"bin: " << bitset< 16 >(b) << endl;
return 0;
}
产生:
hex: 0012, dec: 18, oct: 000022, bin: 10010
hex: 0012, dec: 18, oct: 000022, bin: 0000000000010010
也可以阅读赫伯·萨特的100,进行有趣的讨论.