c# - 将带符号的二进制转换为十进制、八进制和十六进制
问题描述
public static void Dec(string[] args)
{
string b = "1000000000001010";
string a = Convert.ToInt32(b, 2).ToString();
Console.WriteLine(a);
}
string B2D(string b)
{
string a = Convert.ToInt32(b, 2).ToString();
return a;
}
string B2H(string b)
{
string a = Convert.ToInt32(b, 2).ToString("X");
return a;
}
string B2O(string b)
{
int a = Convert.ToInt32(b, 2);
string c = Convert.ToString(a, 8);
return c;
}
我有一个带符号的二进制数,它是十进制形式的 -10,我希望输出字符串为 -10。我的输出变得随机,我找不到任何解决方案。
解决方案
我有一个带符号的二进制数,十进制形式为 -10
1000000000001010(2) 不是 -10(10) 开头的“1”表示负号,但是对于负数,您可以通过正数以外的方式创建它们。
https://en.wikipedia.org/wiki/Two%27s_complement https://www.geeksforgeeks.org/how-the-negative-numbers-are-stored-in-memory/
Alex Larionov 在评论中提到,-10(10) = 1111111111110110(-2) 并且需要转换为 Int16。是的,就像 16 位数字转换为 32 位数字一样,它变为正数: 00000000000000001111111111110110(2) = 65 526(10) (转换用零填充额外的 16 位,使数字不再是 16 位负数)
(二进制补全)二进制系统中的 32 位表示为 11111111111111111111111111110110
public static void Main(string[] args)
{
string b = "11111111111111111111111111110110";
Console.WriteLine(B2D(b));
Console.WriteLine(B2H(b));
Console.WriteLine(B2O(b));
}
static string B2D(string b)
{
string a = Convert.ToInt32(b, 2).ToString();
return a;
}
static string B2H(string b)
{
string a = Convert.ToInt32(b, 2).ToString("X");
return a;
}
static string B2O(string b)
{
int a = Convert.ToInt32(b, 2);
string c = Convert.ToString(a, 8);
return c;
}
}
推荐阅读
- javascript - 为 MongoDB 编写相关数据文件
- android - 在使用 gRPC 库的 Android 项目上添加 Google 服务插件时出现 Gradle 同步错误
- android - 如何使用 Intent.ACTION_CREATE_DOCUMENT 编写文件
- php - 带有 php-fpm shell_exec 的 sudoers 在 18.04 中停止工作
- facebook - 应用因违反 Facebook 平台政策(平台政策 8.1)而被禁用
- python - 仅在正则表达式中捕获重复组
- java - Andriod AlertDialog.Builder 方法在传入 getActivity() 时出错
- java - 从 PKCS1 密钥获取 RSA 公钥
- ms-word - Office JavaScript API:跟踪更改
- flutter - Flutter/Dart 时间表的滚动视图中的多个滚动视图