我需要使用二进制数.

我试着写道:

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 functionimplement your own.

不幸的是,您不能使用STL流进行基数2格式化(因为setbase只支持基数8、10和16),但是您can使用的是itoastd::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,进行有趣的讨论.

C++相关问答推荐

segfault在C中使用getline()函数

Ebpf内核代码:permission denied:invalid access to map value

如何创建由符号组成的垂直结果图形?

将 struct 变量赋给自身(通过指针取消引用)是否定义了行为?

在C23中使用_GENERIC实现带有右值的IS_POINTER(P)?

字符是否必须转换为无符号字符,然后才能与getc家族的返回值进行比较?

向上强制转换C中的数值类型总是可逆的吗?

将宏值传递给ARM链接器,该链接器将变量放置在特定位置

错误:包含文件时类型名称未知

平均程序编译,但结果不好

S的这种管道实施有什么问题吗?

关于";*(++p)->;t";、&++p->;t";和&q;++*p->;t";的问题

#定义SSL_CONNECTION_NO_CONST

在编写代码时,Clion比vscode有更多的问题指示器

如何使用唯一数字对整型进行分区

按长度对argv中的单词进行排序

如何将C中的两个字符串与从文件接收的字符串中的字符数进行比较

Zlib:解压缩大文件导致";无效代码长度设置";错误

free后内存泄漏?

如何向 execl 创建的后台程序提供输入?