虽然电脑内部是采用二进制进行运算,但广大程序员一般都会以十进制或者十六进制数据进行开发。不过有时候知道数据的二进制形式还是非常有用的,尤其是在进行逻辑运算或按位运算时,进行二进制转换就更加重要了。本文会介绍如何将一个十进制整数转换成二进制,然后再将其转换为十进制。
将数据转换为二进制其实非常简单,只要按照以下步骤进行即可(X为十进制整数):
1. 对X进行模2运算。结果非0既1。这就是第一位(最右端)二进制数。
2. 将X 除以2,并丢弃余数(也就是用“\”进行整数除法)。
3. 如果上一步结果为0,则结束转换,否则从第一步起继续进行转换。
如果你还不懂,我们举个例子。假设我们要将13转换为二进制形式(记住,转换是从右到左进行的)
1. 13 模2等于1,因此第一位(最右边)二进制代码为1。
2. 13 \ 2等于 6。
3. 6 模2等于 0,因此第二位二进制代码为0。
4. 6 \ 2 等于3。
5. 3 模2 等于1,因此第三位二进制代码为1。
6. 3 \ 2 等于1.
7. 1 模2 等于 1,因此第四位二进制代码为1。
8. 1 \ 2 等于0,这表示转换结束。从右到左排列一下上面的结果,就会得出13的二进制数是1101。
以下VB函数 |
以下VB函数可以完成十进制转换二进制的工作。另外,这个函数还加入了对二进制长度的判断,如果转换出来的二进制长度低于最小值,函数会自动在二进制字符串前补0。
Public Function DecimalToBinary(DecimalValue As Long, MinimumDigits As Integer) As String
' Returns a string containing the binary ' representation of a positive integer.
Dim result As String Dim ExtraDigitsNeeded As Integer
' Make sure value is not negative. DecimalValue = Abs(DecimalValue)
' Construct the binary value. Do result = CStr(DecimalValue Mod 2) & result DecimalValue = DecimalValue \ 2 Loop While DecimalValue > 0
' Add leading zeros if needed.
ExtraDigitsNeeded = MinimumDigits - Len(result) If ExtraDigitsNeeded > 0 Then result = String(ExtraDigitsNeeded, "0") & result End If
DecimalToBinary = result
End Function
将二进制转换为十进制 |
将二进制转换为十进制的过程就是上述过程的逆过程。每一位二进制数都要乘以2的指数,从2的0次幂开始(最右边)乘,第二位是乘以2的1次幂,以此类推。需要注意的是,任何数的0次幂都是1,而任何数的1次幂都是它本身。以下以1101为例进行说明:
1. 第一位是1,1乘以2的0次幂等于1。
2. 第二位是0,0乘以2的1次幂等于0。
3. 第三位是1,1乘以2的2次幂等于4。
4. 第四位是1,1乘以2的3次幂等于8。
5. 8 + 4 + 1 等于13.
以下代码完成二进制到十进制的转换:
Public Function BinaryToDecimal(BinaryValue As String) As Long
' Returns the decimal equivalent of a binary number.
Dim idx As Integer Dim tmp As String Dim result As Long Dim digits As Integer
digits = Len(BinaryValue) For idx = digits To 1 Step -1 tmp = Mid(BinaryValue, idx, 1) If tmp = "1" Then result = result + 2 ^ (digits - idx) Next
BinaryToDecimal = result
End Function
本函数会将非1的任何数字当做0。你可以在代码中加入对数字的检验,以确保给定的二进制字符串中只有0和1。 | |