当前位置 : 主页 > 编程语言 > c语言 >

VB.NET中的八进制转换

来源:互联网 收集:自由互联 发布时间:2021-06-24
我对Oct函数有点困惑. 10月(-8)没有返回-10,它返回37777777770.我将编写自己的函数,但是有人知道为什么它会给出如此奇怪的结果吗? 计算机如何表示二进制中的负数? 多年来,several ways一直
我对Oct函数有点困惑. 10月(-8)没有返回-10,它返回37777777770.我将编写自己的函数,但是有人知道为什么它会给出如此奇怪的结果吗? 计算机如何表示二进制中的负数?

多年来,several ways一直被设想为代表负数,但为了将这个答案放在论文的短边,我们只会看两个补码.

要计算负数的二进制补码,我们使用以下步骤:

>取数字的大小(又名它的绝对值)
>补充所有位(按位不)
>在结果中添加1(简单添加)

那么两个补码二进制中的-8是多少?首先让我们将绝对值转换为二进制(为了简单起见,我们现在将工作在8位.我已经用32位数字得出了相同的答案.)

|8| => 0000 1000

下一步是补充数字中的所有位

0000 1000 => 1111 0111

最后,我们在结果中加1,得到我们的二进制补码表示

1111 0111
+        1
----------
 1111 1000 (Don't forget to carry)

好的,简要回顾一下八进制数.八进制或基数8是以更紧凑的方式表示二进制数的另一种方式.更敏锐的观察者会注意到8是2的幂,我们当然可以利用这个事实将我们的负数转换为八进制.

为什么这会使10月产生带有负数的奇怪结果?

Oct函数对数字的二进制表示进行操作,将其转换为八进制(Base 8)表示.那么让我们将8位数转换为八进制数.

1111 1000 => 11 111 000 => 011 111 000 => 370

请注意,由于8 = 2 ^ 3,因此很容易转换,因为我们所要做的就是将数字分成三位组并转换每组. (很像是如何通过分成4位组来转换十六进制.)

那么我如何让Oct产生常规结果呢?

使用Oct将数字的绝对值转换为八进制.如果数字小于0,请在前面贴上负号.

使用32位数字的示例

我们将留在-8因为它一直对我们这么好.因此将-8转换为二进制补码给出:

Convert:  0000 0000 0000 0000 0000 0000 0000 1000
Invert:   1111 1111 1111 1111 1111 1111 1111 0111
Add 1:    1111 1111 1111 1111 1111 1111 1111 1000
Separate: 11 111 111 111 111 111 111 111 111 111 000
Pad:      011 111 111 111 111 111 111 111 111 111 000
Convert:   3   7   7   7   7   7   7   7   7   7   0
Shorten:  37777777770

当你打电话给Oct(-8)时,会产生你看到的结果.

有了这些知识,您现在还可以解释为什么Hex(-8)产生0xFFFFFFF8. (你可以看到为什么我在大多数情况下都使用了8位数字.)

1有关二进制数的过于详细的介绍,请查看Wikipedia article

网友评论