1. ホーム
  2. c++

[解決済み】CやC++でバイナリ・リテラルを使うことはできますか?

2022-04-08 14:28:40

質問

2進数の演算が必要です。

書いてみた。

const x = 00010000;

しかし、うまくいかなかった。

と同じ値を持つ16進数を使えばいいことは知っています。 00010000 しかし、C++に2進数の型があるかどうか、また、ない場合、私の問題に対する他の解決策があるかどうか知りたいのです。

どのように解決するのですか?

あなたは 使用 BOOST_BINARY C++0xを待っている間 :) BOOST_BINARY テンプレート実装の利点は、間違いなく C言語プログラムでも使用可能 (100%プリプロセッサ駆動です)。

逆のこと(つまり、数値を2進数で出力する)を行うには、非移植型の itoa 機能 または を実装してください。 .

残念ながら、STLストリームでbase2フォーマットを行うことはできません( setbase は8,10,16の塩基にしか対応しませんが できる のどちらかを使用します。 std::string のバージョンです。 itoa または、(より簡潔ではあるが、わずかに効率は悪い)。 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

また、ハーブ・サッターの マナーファームのストリングフォーマー を使うと、面白い議論ができる。