二进制-十进制负位集
Binary-Decimal Negative bit set
如何判断二进制数是否为负?
目前我有下面的代码。它可以很好地转换为二进制。当转换为十进制时,我需要知道最左边的位是否为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<<"nn";
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 ==> %dn",num, res);
// do it again for an 8 bit positive value
// this time with just direct casts.
num = 0x70;
printf("%d ==> %dn", num, (int)((signed char)(num & 0xFF)));
return 0;
}
245 ==> -11
112 ==> 112
那是你想做的吗?简而言之,上面的代码将获取num
底部的8位,将它们视为带符号的8位值,然后将它们提升为带符号的本机int
。结果是,现在您不仅可以"知道"8位是否是负数(因为如果它们是负数,res将是负数),您还可以在此过程中获得8位带符号数作为本机int
。
int
中的第8位是否设置,并且应该表示负值状态,那么为什么不直接:
int IsEightBitNegative(int val)
{
return (val & 0x80) != 0;
}
相关文章:
- visual在c++中将十进制数转换为二进制数
- C++十进制到二进制,如何转换
- C++从二进制转换为十进制数
- 我编写了代码将十进制分数转换为其二进制等效数.它编译得很好,但在执行时挂起
- uint8_t同一二进制文件的不同十进制值
- 十进制到二进制转换器 c++
- 如何在C ++中将二进制字符串128位转换为十进制字符串?
- 将二进制转换为十进制,我如何要求用户仅输入二进制
- C++:二进制到十进制w/转换过程的外观
- 如何在C++中将二进制编码十进制转换为 int
- 如何使用链表将负十进制数转换为二进制?
- 十进制,包括负到 32 位二进制转换器
- 输入 1024 后十进制到二进制转换的输出错误?
- 以正确的顺序从十进制转换为二进制
- 二进制反转为十进制数
- 十进制到二进制的实现不能完全适用于我大学的检查器。问题或提示可能是什么
- 如何将值从十进制存储为二进制,使其在 C++ 中将值保存在 6 位
- 使用指数将十进制转换为二进制
- 将40个字节长的数据框从十六进制转换为二进制,然后转换为十进制
- 我通过迭代加法将二进制数转换为十进制并检查单个字符(请参阅代码)的方法有什么问题?