繁体   English   中英

二进制十进制负位设置

[英]Binary-Decimal Negative bit set

如何判断二进制数是否为负?

目前,我有下面的代码。 它可以很好地转换为Binary。 当转换为十进制时,我需要知道最左边的位是否为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);
}

您正在错误地检查负值。 而是执行以下操作:

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

或者可能只是将其与0进行比较。

bool Negative = (value < 0);

为什么不将它与0进行比较呢? 应该可以正常工作,几乎可以肯定,您不能以比编译器更有效的方式执行此操作。

我完全不清楚这是否是OP所需要的,但值得一掷:

如果您知道在有符号的int中有一个值,该值应该表示一个有符号的8位值,则可以将其拆开,将其存储在有符号的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

是你想做的吗? 简而言之,上面的代码将把8位放在num的底部,将它们视为带符号的8位值,然后将它们提升为带符号的本地int 结果是,您现在不仅可以“知道” 8位是否为负数(因为res如果为负数),还可以在此过程中获得作为本地int的8位带符号数。

另一方面,如果您关心的只是第8位是否在输入int设置,并且应该表示负值状态,那么为什么不:

int IsEightBitNegative(int val)
{
    return (val & 0x80) != 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM