VB.NET中的八进制转换
我对VB.NET中的八进制转换,vb.net,Vb.net,我对Oct功能有点困惑Oct(-8)不返回-10,它返回37770。我将只编写自己的函数,但有人知道为什么它会返回如此奇怪的结果吗 计算机如何用二进制表示负数? 多年来,人们一直梦想着用负数来表示,但为了把这个答案保留在论文的简短部分,我们只看两的补码。1 要计算负数的2的补码,我们使用以下步骤: 取数字的大小(也称为绝对值) 补全所有位(按位不补全) 向结果中添加1(简单相加) 那么二元补码中的-8是什么呢?首先,让我们将绝对值转换为二进制(为了简单起见,现在我们将使用8位。我已经用32位数字
Oct
功能有点困惑Oct(-8)
不返回-10,它返回37770。我将只编写自己的函数,但有人知道为什么它会返回如此奇怪的结果吗 计算机如何用二进制表示负数?
多年来,人们一直梦想着用负数来表示,但为了把这个答案保留在论文的简短部分,我们只看两的补码。1
要计算负数的2的补码,我们使用以下步骤:
| 8 |=>0000 1000
下一步是对数字中的所有位进行补码
0000 1000=>1111011
最后,我们在结果上加1,得到我们两个的补码表示
1111011
+ 1
----------
1111000(别忘了随身携带)
好,简单回顾一下八进制数。八进制,或基数8,是以更紧凑的方式表示二进制数的另一种方式。更敏锐的人会注意到8是2的幂,我们当然可以利用这一事实将负数转换成八进制
为什么这会使Oct
产生带有负数的奇怪结果?
Oct
函数对数字的二进制表示进行操作,将其转换为八进制(以8为基数)表示。让我们把8位数字转换成八进制
1111000=>1111000=>0111000=>370
请注意,由于8=2^3
很容易转换,因为我们所要做的就是将数字分成三位一组,然后转换每组。(非常类似于通过将十六进制分解为4位的组来转换十六进制。)
那么,如何获得Oct
以生成常规结果呢?
使用Oct
将数字的绝对值转换为八进制。如果数字小于0,则在前面粘贴负号
使用32位数字的示例
我们将继续使用-8,因为它一直对我们很好。因此,将-8转换为2的补码得到:
转换:0000 000
反转:1111111111111111111111111111111111111111111111011
加1:11111111111111111111111111111111111111000
分开:1111111000
Pad:011111 111 000
换算:3770
缩短:37770
这将生成调用Oct(-8)
时看到的结果
有了这些知识,您现在还可以解释为什么Hex(-8)
产生0xFFFFFFF8
。(你可以看到为什么我在大多数情况下都使用了8位数字。)
1有关二进制数的详细介绍,请查看这不是特定于.NET的,MS Calc给出了相同的输出。这是因为它表示负数。((位翻转)+1)与Hex()函数相同。日期来自尚不支持无符号整数的早期VB版本。否则,显示值的二进制表示就不简单了。如果您以前使用过DEC操作系统,您将永远不会喜欢Oct()。“还不支持无符号整数”blimey。。。