[英]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.