我正在编写一个应该在二进制,十进制和十六进制之间转换的代码。我有二进制和十进制数字,但当我得到十六进制时,我感到很困惑。
如果不使用Integer.toHexString,您将如何进行此转换。
我知道已经有一个代码可以在java中为我做这个,我的困惑是如何告诉java使用手动转换来做。
我的想法是创建多个if语句,每个语句解释0为0000,或C为1100,等等。
它会遍历十六进制字符串中的每个字符,并将二进制值加在一起。
我觉得这可以通过很多代码来解决我被要求做的事情。
除非这是唯一的方法,否则我会开始这样做。
但是如果有一个伪代码可以解释如何更有效地做到这一点,那将是值得赞赏的。
额外信息:
int hexDigit1A=(binaryDigit8%2)*8+(binaryDigit7%2)*4+(binaryDigit6%2)*2+(binaryDigit5%2)*1;
int hexDigit2A=(binaryDigit4%2)*8+(binaryDigit3%2)*4+(binaryDigit2%2)*2+(binaryDigit1%2)*1;
据我所知,这会将4位二进制数转换为适当的小数,这甚至是有用的,或者只对十进制有效。
非常感谢你。
答案 0 :(得分:1)
我的想法是创建多个if语句,每个语句都解释为0 0000,或C为1100,等等。
圣牛,这必须像有史以来最糟糕的想法。
解决这个问题的关键是理解数字的含义。
例如
十六进制的A12C可表示为
A * 16 ^ 3 + 1 * 16 ^ 2 + 2 * 16 ^ 1 + C. 要么 10 * 16 ^ 3 + 1 * 16 ^ 2 + 2 * 16 ^ 1 + 12
然后你可以设置一个while循环并做一些div / mod kung fu来进行转换。
通过这种方式,您的转化将适用于任何数字限制最大限制。
答案 1 :(得分:1)
现代计算机中的所有整数都以硬件形式表示为二进制。十六进制表示二进制数,其中每4位由一个字符0-F表示。所以是
的整数0100 1100
也可以用十六进制表示为4C(十进制为76)。
整数有两个操作可以帮助你。第一个是'和'函数,在java中用单个&符号('&')表示。如果你和'两个整数,则一个中的每个位位置都与下一个中的相应位位置相对应;因此,如果你'和'使用二进制数0000 1111
,结果将与原始数字的最低4位相同。在我们的示例中,结果为0000 1100
。 (我们将0000 1111称为'掩码',并说我们正在屏蔽低4位或掩盖高4位。)
第二个操作是转移;一个人可以用>>向右或向左移动和<<
因此,如果您有一个整数并且想要输出其十六进制等效值,请使用以下循环:
并执行此操作的次数与要转换的4位分组一样多。你得到的结果将是 反向顺序,即你得到的第一个十六进制数字在十六进制数的最右边。如果你想调整算法以返回前进数字,请随意!
警告:负数使这稍微复杂一些,因为移动负数往往会改变'符号位'。在尝试处理负数之前,我会先了解并理解所有概念,而不是深入研究所有这些。
答案 2 :(得分:1)
这是通过简单的映射功能实现的。当您手动执行此操作时,您将二进制值分成4位正确吗?然后为每个“4位”分配它自己的特定十六进制值。您的算法应该检查您的二进制值,查看每个“4位”并确定要应用的正确十六进制值。
这看起来像一个实验室,所以这里有一些超级基本的伪代码。
Binary Value
Look at last 4 bits
Map to appropriate Hexadecimal Number
Look at next 4 bits, etc etc.
这应该让你对十六进制的内容有足够的了解 - >二进制转换。同样的想法!