0

2進数が負であるかどうかはどうすればわかりますか?

現在、私は以下のコードを持っています。バイナリへの変換は正常に機能します。10進数に変換するとき、左端のビットが1であるかどうかを確認して、それが負であるかどうかを判断する必要がありますが、その方法がわかりません。

また、Bin2関数に1と0を出力させる代わりに、整数を返すようにするにはどうすればよいですか?文字列に格納してからintに変換したくありませんでした。

編集:私は8ビットの数字を使用しています。

int Bin2(int value, int Padding = 8)
{
    for (int I = Padding; I > 0; --I)
    {
        if (value & (1 << (I - 1)))
            std::cout<< '1';
        else
            std::cout<<'0';
    }

    return 0;
}

int Dec2(int Value)
{
    //bool Negative = (Value & 10000000);

    int Dec = 0;
    for (int I = 0; Value > 0; ++I)
    {
        if(Value % 10 == 1)
        {
            Dec += (1 << I);
        }
        Value /= 10;
    }

    //if (Negative) (Dec -= (1 << 8));

    return Dec;
}

int main()
{
    Bin2(25);
    std::cout<<"\n\n";
    std::cout<<Dec2(11001);
}
4

3 に答える 3

2

これがOPが探しているものであるかどうかは完全にわかりませんが、投げる価値はあります。

符号付き8ビット値を表すことになっている符号付きの値があることがわかっている場合は、intそれを分解して符号付き8ビット値に格納してから、次のintようにネイティブの符号付き値にプロモートします。 :

#include <stdio.h>

int main(void)
{
    // signed integer, value is 245. 8bit signed value is (-11)
    int num = 0xF5;

    // pull out the low 8 bits, storing them in a signed char.
    signed char ch = (signed char)(num & 0xFF);

    // now let the signed char promote to a signed int.
    int res = ch;

    // finally print both.
    printf("%d ==> %d\n",num, res);

    // do it again for an 8 bit positive value
    //  this time with just direct casts.
    num = 0x70;
    printf("%d ==> %d\n", num, (int)((signed char)(num & 0xFF)));
    return 0;
}

出力

245 ==> -11
112 ==> 112

それはあなたがやろうとしていることですかつまり、上記のコードは、の下部にあるnum8ビットを取得し、それらを符号付き8ビット値として扱い、符号付きネイティブにプロモートしますint。その結果、8ビットが負の数であるかどうかを「知る」ことができるだけでなく(resが負の場合は負になるため)、intプロセスでネイティブとして8ビットの符号付き数値も取得できます。

一方、8番目のビットが入力intに設定されているかどうかだけが気になり、負の値の状態を示すことになっている場合は、次のようにします。

int IsEightBitNegative(int val)
{
    return (val & 0x80) != 0;
}
于 2012-12-31T10:50:18.200 に答える
2

負の値を誤ってチェックしています。代わりに次の手順を実行してください。

bool Negative = (value & 0x80000000); //It will work for 32-bit platforms only

または、0と比較するだけかもしれません。

bool Negative = (value < 0);
于 2012-12-31T09:58:46.333 に答える
2

と比較してみませんか0。正常に動作するはずであり、ほぼ確実に、コンパイラよりも効率的な方法でこれを行うことはできません。

于 2012-12-31T09:59:28.860 に答える