数据 C++ 的二进制表示显示的数据不正确
Incorrect data shown for binary representation of data C++
我正在尝试使用以下代码输出数字 115 的二进制表示,但显示的结果不正确。
我期待 0000 0000 0111 0011 但显示的是 0000 0000 0111 1111。
好像确定要显示一个1,就显示这么多了
void Bits::displayShort(short input)
{
cout << endl;
sMask = 1000000000000000;
for (int count = 0; count < 16; count++)
{
if ((input & sMask) == 0)
{
cout << "0";
}
else
{
cout << "1";
}
if (count == 3 || count == 7 || count == 11) { cout << " "; }
sMask = sMask >> 1;
}
cout << endl << endl;
}
您开始于:
sMask = 1000000000000000;
这不是 2 的幂。您应该从短的最大位开始,即:
sMask = 0x8000;
或者我们可以使用一个不太容易出错的表达式:
sMask = 1 << 15;
sMask = 1 << (sizeof(input)*8 - 1);
或者在 C++14 中,我们有二进制文字,这可能是您想要的:
sMask = 0b1000000000000000;
你有几个错误。
sMask
的初始值 -- 它需要是 (1 << (8*sizeof(short)-1))
.
short sMask = (1 << (8*sizeof(short)-1));
你需要在循环中改变input
的值,而不是sMask
的值。
而不是
sMask = sMask >> 1;
你需要
input = input << 1;
您可以将其缩短为:
input <<= 1;
我正在尝试使用以下代码输出数字 115 的二进制表示,但显示的结果不正确。
我期待 0000 0000 0111 0011 但显示的是 0000 0000 0111 1111。
好像确定要显示一个1,就显示这么多了
void Bits::displayShort(short input)
{
cout << endl;
sMask = 1000000000000000;
for (int count = 0; count < 16; count++)
{
if ((input & sMask) == 0)
{
cout << "0";
}
else
{
cout << "1";
}
if (count == 3 || count == 7 || count == 11) { cout << " "; }
sMask = sMask >> 1;
}
cout << endl << endl;
}
您开始于:
sMask = 1000000000000000;
这不是 2 的幂。您应该从短的最大位开始,即:
sMask = 0x8000;
或者我们可以使用一个不太容易出错的表达式:
sMask = 1 << 15;
sMask = 1 << (sizeof(input)*8 - 1);
或者在 C++14 中,我们有二进制文字,这可能是您想要的:
sMask = 0b1000000000000000;
你有几个错误。
sMask
的初始值 -- 它需要是(1 << (8*sizeof(short)-1))
.short sMask = (1 << (8*sizeof(short)-1));
你需要在循环中改变
input
的值,而不是sMask
的值。而不是
sMask = sMask >> 1;
你需要
input = input << 1;
您可以将其缩短为:
input <<= 1;