2011-11-21 52 views
21

RHEL 5.7 x86_64ボックスでg ++バージョン4.1.2を使用しています。これは、RHEL 6.0 x86_64に付属のg ++​​バージョン4.4.5でうまくいきます。このコンパイラのエラーは何を意味し、どのように修正しますか?エラー:整数定数の無効な接尾辞 "b11111111111111111111111111111111"

[[email protected] C]$ g++ -Wall -o binary ./binary.cpp 
./binary.cpp:2:5: error: invalid suffix "b11111111111111111111111111111111" on integer constant 
./binary.cpp:3:5: error: invalid suffix "b11111111111111111111111111111110" on integer constant 
./binary.cpp:4:5: error: invalid suffix "b11111111111111111111111111111100" on integer constant 
./binary.cpp:5:5: error: invalid suffix "b11111111111111111111111111111000" on integer constant 
./binary.cpp:6:5: error: invalid suffix "b11111111111111111111111111110000" on integer constant 
./binary.cpp:7:5: error: invalid suffix "b11111111111111111111111111100000" on integer constant 
./binary.cpp:8:5: error: invalid suffix "b11111111111111111111111111000000" on integer constant 
./binary.cpp:9:5: error: invalid suffix "b11111111111111111111111110000000" on integer constant 
./binary.cpp:10:5: error: invalid suffix "b11111111111111111111111100000000" on integer constant 
./binary.cpp:11:5: error: invalid suffix "b11111111111111111111111000000000" on integer constant 
./binary.cpp:12:5: error: invalid suffix "b11111111111111111111110000000000" on integer constant 
./binary.cpp:13:5: error: invalid suffix "b11111111111111111111100000000000" on integer constant 
./binary.cpp:14:5: error: invalid suffix "b11111111111111111111000000000000" on integer constant 
./binary.cpp:15:5: error: invalid suffix "b11111111111111111110000000000000" on integer constant 
./binary.cpp:16:5: error: invalid suffix "b11111111111111111100000000000000" on integer constant 
./binary.cpp:17:5: error: invalid suffix "b11111111111111111000000000000000" on integer constant 
./binary.cpp:18:5: error: invalid suffix "b11111111111111110000000000000000" on integer constant 
./binary.cpp:19:5: error: invalid suffix "b11111111111111100000000000000000" on integer constant 
./binary.cpp:20:5: error: invalid suffix "b11111111111111000000000000000000" on integer constant 
./binary.cpp:21:5: error: invalid suffix "b11111111111110000000000000000000" on integer constant 
./binary.cpp:22:5: error: invalid suffix "b11111111111100000000000000000000" on integer constant 
./binary.cpp:23:5: error: invalid suffix "b11111111111000000000000000000000" on integer constant 
./binary.cpp:24:5: error: invalid suffix "b11111111110000000000000000000000" on integer constant 
./binary.cpp:25:5: error: invalid suffix "b11111111100000000000000000000000" on integer constant 
./binary.cpp:26:5: error: invalid suffix "b11111111000000000000000000000000" on integer constant 
./binary.cpp:27:5: error: invalid suffix "b11111110000000000000000000000000" on integer constant 
./binary.cpp:28:5: error: invalid suffix "b11111100000000000000000000000000" on integer constant 
./binary.cpp:29:5: error: invalid suffix "b11111000000000000000000000000000" on integer constant 
./binary.cpp:30:5: error: invalid suffix "b11110000000000000000000000000000" on integer constant 
./binary.cpp:31:5: error: invalid suffix "b11100000000000000000000000000000" on integer constant 
./binary.cpp:32:5: error: invalid suffix "b11000000000000000000000000000000" on integer constant 
./binary.cpp:33:5: error: invalid suffix "b10000000000000000000000000000000" on integer constant 

コード:

static int s_bitCountMask[32] = { 
    0b11111111111111111111111111111111, 
    0b11111111111111111111111111111110, 
    0b11111111111111111111111111111100, 
    0b11111111111111111111111111111000, 
    0b11111111111111111111111111110000, 
    0b11111111111111111111111111100000, 
    0b11111111111111111111111111000000, 
    0b11111111111111111111111110000000, 
    0b11111111111111111111111100000000, 
    0b11111111111111111111111000000000, 
    0b11111111111111111111110000000000, 
    0b11111111111111111111100000000000, 
    0b11111111111111111111000000000000, 
    0b11111111111111111110000000000000, 
    0b11111111111111111100000000000000, 
    0b11111111111111111000000000000000, 
    0b11111111111111110000000000000000, 
    0b11111111111111100000000000000000, 
    0b11111111111111000000000000000000, 
    0b11111111111110000000000000000000, 
    0b11111111111100000000000000000000, 
    0b11111111111000000000000000000000, 
    0b11111111110000000000000000000000, 
    0b11111111100000000000000000000000, 
    0b11111111000000000000000000000000, 
    0b11111110000000000000000000000000, 
    0b11111100000000000000000000000000, 
    0b11111000000000000000000000000000, 
    0b11110000000000000000000000000000, 
    0b11100000000000000000000000000000, 
    0b11000000000000000000000000000000, 
    0b10000000000000000000000000000000, 
}; 

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    for (int i = 0; i < 32; i++) { 
     printf("%d\n",s_bitCountMask[i]); 
    } 
} 
+29

+1はエラーがちょうど素晴らしいように見えるので+1してください。 – slhck

+3

このようなタイトルをクリックできないのはどうですか? – Mysticial

+3

答えはありませんが、実行時に配列を計算する方が簡単でしょうか? –

答えて

29

それは、G ++のverison古いが0b000 2進定数の構文を受け入れないことを意味します。

0xffffffff, 0xfffffffe, 0xfffffffc, 0xfffffff8, 
0xfffffff0, 0xffffffe0, 0xffffffc0, 0xffffff80, 
0xffffff00, 0xfffffe00, 0xfffffc00, 0xfffff800, 
0xfffff000, 0xffffe000, 0xffffc000, 0xffff8000, 
0xffff0000, 0xfffe0000, 0xfffc0000, 0xfff80000, 
0xfff00000, 0xffe00000, 0xffc00000, 0xff800000, 
0xff000000, 0xfe000000, 0xfc000000, 0xf8000000, 
0xf0000000, 0xe0000000, 0xc0000000, 0x80000000 
+6

ところで、バイナリ形式は[gcc 4.3](http://gcc.gnu.org/gcc-4.3/changes.html)からのみ利用可能です。 – kennytm

8

Rupのは、これに対する正しい答えを持っている:バイナリが簡単に一度にヘクスに4ビットを変換 - 六角ではなくとしてあなたは数字を書き換えることができます。しかし、私はこの追加します:あなたがそのテーブルにアクセスしているか、それだけでこれでその場で値を生成するために、より適切かもしれない依存

を:

unsigned mask = ~((1 << index) - 1); 
unsigned mask = -1 << index;   // Better solution (by Rup) 

また、あなたも宣言することができ

static int s_bitCountMask[32] = { 
    -1 << 0, 
    -1 << 1, 
    -1 << 2, 
    -1 << 3, 

    ... 

    -1 << 31, 
}; 

* -1は(それが今、ほぼすべてのマシン上にある)すべての1ビットであると仮定すると:このようなテーブル。

+0

:-)私はそれを時間の中で考えることができたらそれを編集したでしょう。私の試みは '-1 << index'または'(〜0)<< index'になります。 – Rup

+2

あなたはそれを署名なしにする必要があります。 –

+0

ああ、私はあまりにもそれを見落とした。私の答えを更新しました。 – Mysticial

関連する問題