4

これが一般的な問題であることはわかっていますが、なぜそんなに問題が発生しているのかわかりません。行を IDL コードから C++ に変換しようとしています

IDL:

for i = 0,7 do begin

    b = ishfy(b,1)
    print,b

endfor

私のC++コード:

    for(int i = 0; i < 7; i++)
    {
        b = b << 1;
        cout << b;
    }

私の最初の b は 255 で、254、252 などを受け取ることを期待しています。代わりに、最初のビット シフトは 510 を返します。私の問題は、シフトする前に b をバイナリ形式に変換していないことだと思います。これは正しいです?もしそうなら、どうすれば修正できますか?

前もって感謝します!

4

2 に答える 2

5

<< 左にシフトします。B が最初は 255 (バイナリ 11111111) で、それを 1 つ左にシフトすると、111111110 (ほとんどのマシンでは、int は 32 ビット幅なので、その 0 の余地があります) が得られます。これは、10 進数で 510 です。

したがって、このプログラムは 100% 正常に動作しています。

「切り取る」必要がある場合は、上位ビットで b を char などの 8 ビット幅の型にするか、0xFF と AND します。

于 2013-10-08T20:23:00.880 に答える