【发布时间】:2020-10-27 08:24:13
【问题描述】:
因此,使用下面的代码,我可以将一个数字(例如 2047)保存到使用位中,然后将其读回,它将显示 2047。如果我想对负数执行此操作(例如-2048)
string text = "";
int cnt = 11;
List<int> bits = new List<int>();
for (int i = 11; i >= 0; i--)
{
int t = (-2048 >> i) & 1;
bits.Add(t);
}
int value=0;
for(int i=0;i<bits.Count;i++)
{
text += bits[i];
value &= ~(1 << cnt);
if (bits[i] == 1)
{
value |= 1 << cnt;
}
else
{
value |= 0 << cnt;
}
cnt--;
}
MessageBox.Show(value+ " " +text);
我希望它使用的数字范围是 -2048 到 2047
【问题讨论】:
-
所以你想将一个 int 转换成它在字符串中的二进制表示?
-
这个答案对你有帮助吗stackoverflow.com/a/6790760/697188 或者你需要写实际的算法来做这个家庭作业吗?
-
请改进问题。就目前而言,您似乎只是误解了数字的二进制表示。您对
int值列表的解码失败,因为您没有考虑原始值中存在的其他设置位。见重复。如果您想编码更少的位,然后将解码后的值存储回传统的整数数据类型,则需要检查编码的最高有效位,并将其复制到解码值中剩余的更高功率位。跨度>