C# 中如何计算含符号位和小数位的二进制字符串?
一串表示带符号和小数位的二进制字符串,"111110010010" ,其中最高位为符号位,最右边4位为小数位,除最左边符号位之外由左至右依次表示:2的6次冥 2的5次冥 2的4次冥 2的3次冥 2的2次冥 2的1次冥 2的0次冥 2的-1次冥 2的-2次冥 2的-3次冥 2的-4次冥,符号位为1表示负数。如果为负数,则这里的二进制字符串为补码,得在取反的二进制上加一,然后算出十进制数并添加符号。
这个过程,我不知道C#中如何实现,希望得到大虾指点.
------解决方案--------------------使用 Convert.ToInt32 方法 (String, Int32)
将指定基数的数字的 String 表示形式转换为等效的 32 位有符号整数。
命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)
语法
public static int ToInt32 (
string value,
int fromBase
)
参数
value
包含数字的 String。
fromBase
value 中数字的基数,它必须是 2、8、10 或 16。
返回值
等效于 value 中的数字的 32 位有符号整数。 - 或 - 如果 value 为空引用(在 Visual Basic 中为 Nothing),则为零。
--以上摘MSDN
------解决方案--------------------不太明白。。帮顶~
------解决方案--------------------
string s = "111110010010";
double res = 0d;
for (int i = 0; i < 4; ++i)
{
if (s[s.Length - i - 1] == '1')
res += ((double)1) / System.Math.Pow(2, (4 - i));
}
for (int i = 0; i < s.Length - 5; ++i)
{
if (s[s.Length - i - 4 - 1] == '1')
res += System.Math.Pow(2 , i);
}
if (s[0] == '1')
{
res = 0 - res;
}
------解决方案--------------------顶
------解决方案--------------------
C# code
static double GetDoubleFromString(string input)
{
bool negative = false;
if (input[0] == '1')
{
negative = true;
StringBuilder sb = new StringBuilder();
foreach (char c in input)
sb.Append(c == '0' ? "1" : "0");
input = Convert.ToString(Convert.ToInt32(sb.ToString(), 2) + 1, 2).PadLeft(input.Length, '0');
}
string integers = input.Substring(1, input.Length - 5);
double result = Convert.ToInt32(integers, 2);
for (int i = input.Length - 4; i < input.Length; i++)
{
if (input[i] == '1')
result += Math.Pow(2, -(input.Length - i));
}
return negative ? -result : result;
}
------解决方案--------------------
顶一下!!