我需要转换区间[–1024,1016]中的数字。我将转换为11位:
string s = Convert.ToString(value, 2); //Convert to binary in a string
int[] bits = s.PadLeft(11, '0') // Add 0's from left
.Select(c => int.Parse(c.ToString())) // convert each char to int
.ToArray(); // Convert IEnumerable from select to Array
这非常适合带符号整数[0,1016]。但是对于负整数,我得到32位结果。您是否知道如何将负整数转换为11位数组?
最佳答案
如果您只关心前11位,则只需应用掩码:
string s = Convert.ToString(value & 2047, 2);
这会将值限制为最多11位-对于负数,所有“未使用”的位均为1s。
作为参考:2047是二进制0000 ... 0000 0111 1111 1111,即最低有效11位的掩码。