如何在PB中进行位操作以及二进制与十进制转换(摘录)
2005-01-04 14:06
423 查看
原文:PFC
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
本文拟结合PFC中所提供的pfc_n_cst_numerical对象,讲解如何在PB脚本中实现位操作以及二进制与十进制相互转换。
(一)编写十进制转换成二进制的函数:
public function string of_binary (long al_decimal);integer li_remainder
string ls_binary=''
If IsNull(al_decimal) or al_decimal< 0 Then
string ls_null
SetNull(ls_null)
Return ls_null
End If
If al_decimal = 0 Then
Return '0'
End If
Do Until al_decimal= 0
li_remainder = mod(al_decimal, 2)
al_decimal = al_decimal /2
ls_binary = string(li_remainder) + ls_binary
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Loop
Return ls_binary
end function
(二)编写二进制转换成为十进制的函数:
public function long of_decimal (string as_binary);integer li_cnt
long ll_len
char lch_char[]
long ll_decimal=0
If IsNull(as_binary) or Len(as_binary)<=0 then
long ll_null
SetNull(ll_null)
Return ll_null
End If
ll_len = Len(as_binary)
lch_char = as_binary
For li_cnt = 1 to ll_len
If (Not lch_char[li_cnt]='1') AND (Not lch_char[li_cnt]='0') Then
Return -1
End If
ll_decimal = ll_decimal + (long(lch_char[li_cnt]) * (2 ^ (ll_len - li_cnt)))
Next
Return ll_decimal
end function
(三)编写公用函数以逐位获取BIT位数据:
public function boolean of_getbit (long al_decimal, unsignedinteger ai_bit);Boolean lb_null
If IsNull(al_decimal) or IsNull(ai_bit) then
SetNull(lb_null)
Return lb_null
End If
If Int(Mod(al_decimal / (2 ^(ai_bit - 1)), 2)) > 0 Then
Return True
End If
Return False
end function
(四)编写AND与操作函数:
public function long of_bitwiseand (long al_value1, long al_value2);Integer li_Cnt
Long ll_Result
Boolean lb_Value1[32], lb_Value2[32]
If IsNull(al_Value1) Or IsNull(al_Value2) Then
SetNull(ll_Result)
Return ll_Result
End If
For li_Cnt = 1 To 32
lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
Next
For li_Cnt = 1 To 32
If lb_Value1[li_Cnt] And lb_Value2[li_Cnt] Then
ll_Result = ll_Result + (2^(li_Cnt - 1))
End If
Next
Return ll_Result
end function
(五)编写OR或操作函数:
public function long of_bitwiseor (long al_value1, long al_value2);Integer li_Cnt
Long ll_Result
Boolean lb_Value1[32], lb_Value2[32]
If IsNull(al_Value1) Or IsNull(al_Value2) Then
SetNull(ll_Result)
Return ll_Result
End If
For li_Cnt = 1 To 32
lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
Next
For li_Cnt = 1 To 32
If lb_Value1[li_Cnt] Or lb_Value2[li_Cnt] Then
ll_Result = ll_Result + (2^(li_Cnt - 1))
End If
Next
Return ll_Result
end function
(六)编写XOR异或操作函数:
public function long of_bitwisexor (long al_value1, long al_value2);Integer li_Cnt
Long ll_Result
Boolean lb_Value1[32], lb_Value2[32]
If IsNull(al_Value1) Or IsNull(al_Value2) Then
SetNull(ll_Result)
Return ll_Result
End If
For li_Cnt = 1 To 32
lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
Next
For li_Cnt = 1 To 32
If (lb_Value1[li_Cnt] And Not lb_Value2[li_Cnt]) Or &
(Not lb_Value1[li_Cnt] And lb_Value2[li_Cnt]) Then
ll_Result = ll_Result + (2^(li_Cnt - 1))
End If
Next
Return ll_Result
end function
(七)编写NOT否操作函数:
public function long of_bitwisenot (long al_value);Integer li_Cnt, li_Count
Long ll_Result
string ls_Value, ls_Result
If IsNull(al_Value) Then
SetNull(ll_Result)
Return ll_Result
End If
ls_Value = of_binary(al_Value)
li_Cnt = Len(ls_Value)
For li_Count = 1 To li_Cnt
If Mid(ls_Value, li_Count, 1) = '0' Then
ls_Result = ls_Result + '1'
Else
ls_Result = ls_Result + '0'
End If
End For
Return of_decimal(ls_Result)
end function
(八)调用上述函数:
//将十进制数10转换为二进制1010
ls_binary = of_binary(10)
//将二进制1010转换为十进制数10
ll_decimal = of_decimal(“1010”)
//执行AND与操作(55 && 44) = 36
ll_ret = of_bitwiseand(55,44) //返回36
//执行NOT否操作(! 55) = 8
ll_ret = of_bitwisenot(55) //返回8
//执行OR或操作(55 || 44) = 63
ll_ret = of_bitwiseor(55,44) //返回63
//执行XOR异或操作(55 XOR 44) = 27
ll_ret = of_bitwisexor(55,44) //返回27
至此本文结束。
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
本文拟结合PFC中所提供的pfc_n_cst_numerical对象,讲解如何在PB脚本中实现位操作以及二进制与十进制相互转换。
(一)编写十进制转换成二进制的函数:
public function string of_binary (long al_decimal);integer li_remainder
string ls_binary=''
If IsNull(al_decimal) or al_decimal< 0 Then
string ls_null
SetNull(ls_null)
Return ls_null
End If
If al_decimal = 0 Then
Return '0'
End If
Do Until al_decimal= 0
li_remainder = mod(al_decimal, 2)
al_decimal = al_decimal /2
ls_binary = string(li_remainder) + ls_binary
<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />Loop
Return ls_binary
end function
(二)编写二进制转换成为十进制的函数:
public function long of_decimal (string as_binary);integer li_cnt
long ll_len
char lch_char[]
long ll_decimal=0
If IsNull(as_binary) or Len(as_binary)<=0 then
long ll_null
SetNull(ll_null)
Return ll_null
End If
ll_len = Len(as_binary)
lch_char = as_binary
For li_cnt = 1 to ll_len
If (Not lch_char[li_cnt]='1') AND (Not lch_char[li_cnt]='0') Then
Return -1
End If
ll_decimal = ll_decimal + (long(lch_char[li_cnt]) * (2 ^ (ll_len - li_cnt)))
Next
Return ll_decimal
end function
(三)编写公用函数以逐位获取BIT位数据:
public function boolean of_getbit (long al_decimal, unsignedinteger ai_bit);Boolean lb_null
If IsNull(al_decimal) or IsNull(ai_bit) then
SetNull(lb_null)
Return lb_null
End If
If Int(Mod(al_decimal / (2 ^(ai_bit - 1)), 2)) > 0 Then
Return True
End If
Return False
end function
(四)编写AND与操作函数:
public function long of_bitwiseand (long al_value1, long al_value2);Integer li_Cnt
Long ll_Result
Boolean lb_Value1[32], lb_Value2[32]
If IsNull(al_Value1) Or IsNull(al_Value2) Then
SetNull(ll_Result)
Return ll_Result
End If
For li_Cnt = 1 To 32
lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
Next
For li_Cnt = 1 To 32
If lb_Value1[li_Cnt] And lb_Value2[li_Cnt] Then
ll_Result = ll_Result + (2^(li_Cnt - 1))
End If
Next
Return ll_Result
end function
(五)编写OR或操作函数:
public function long of_bitwiseor (long al_value1, long al_value2);Integer li_Cnt
Long ll_Result
Boolean lb_Value1[32], lb_Value2[32]
If IsNull(al_Value1) Or IsNull(al_Value2) Then
SetNull(ll_Result)
Return ll_Result
End If
For li_Cnt = 1 To 32
lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
Next
For li_Cnt = 1 To 32
If lb_Value1[li_Cnt] Or lb_Value2[li_Cnt] Then
ll_Result = ll_Result + (2^(li_Cnt - 1))
End If
Next
Return ll_Result
end function
(六)编写XOR异或操作函数:
public function long of_bitwisexor (long al_value1, long al_value2);Integer li_Cnt
Long ll_Result
Boolean lb_Value1[32], lb_Value2[32]
If IsNull(al_Value1) Or IsNull(al_Value2) Then
SetNull(ll_Result)
Return ll_Result
End If
For li_Cnt = 1 To 32
lb_Value1[li_Cnt] = of_getbit(al_Value1, li_Cnt)
lb_Value2[li_Cnt] = of_getbit(al_Value2, li_Cnt)
Next
For li_Cnt = 1 To 32
If (lb_Value1[li_Cnt] And Not lb_Value2[li_Cnt]) Or &
(Not lb_Value1[li_Cnt] And lb_Value2[li_Cnt]) Then
ll_Result = ll_Result + (2^(li_Cnt - 1))
End If
Next
Return ll_Result
end function
(七)编写NOT否操作函数:
public function long of_bitwisenot (long al_value);Integer li_Cnt, li_Count
Long ll_Result
string ls_Value, ls_Result
If IsNull(al_Value) Then
SetNull(ll_Result)
Return ll_Result
End If
ls_Value = of_binary(al_Value)
li_Cnt = Len(ls_Value)
For li_Count = 1 To li_Cnt
If Mid(ls_Value, li_Count, 1) = '0' Then
ls_Result = ls_Result + '1'
Else
ls_Result = ls_Result + '0'
End If
End For
Return of_decimal(ls_Result)
end function
(八)调用上述函数:
//将十进制数10转换为二进制1010
ls_binary = of_binary(10)
//将二进制1010转换为十进制数10
ll_decimal = of_decimal(“1010”)
//执行AND与操作(55 && 44) = 36
ll_ret = of_bitwiseand(55,44) //返回36
//执行NOT否操作(! 55) = 8
ll_ret = of_bitwisenot(55) //返回8
//执行OR或操作(55 || 44) = 63
ll_ret = of_bitwiseor(55,44) //返回63
//执行XOR异或操作(55 XOR 44) = 27
ll_ret = of_bitwisexor(55,44) //返回27
至此本文结束。
相关文章推荐
- 如何在PB中进行位操作以及二进制与十进制转换(摘录)
- 如何在PB中进行位操作以及二进制与十进制转换
- JS获取当前时间戳以及如何转换为10位数的时间戳(方便和php的时间戳(10位)进行操作)
- ACCESS 如何进行二进制到六十二进制向十进制的转换?
- 位操作符-数字如何转化为二进制并进行操作
- 利用栈进行进制转换,二进制转换为十进制
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- 实验3:栈和队列的基本操作实现及其应用——十进制转换为二进制
- Java中的负数的在计算机中的二进制表示,以及与十进制的相互转换
- java位运算(一),了解二进制与八进制,十进制以及16进制的转换
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- 二进制,八进制,十六进制,十进制间进行相互转换
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换
- java中进行二进制,八进制,十六进制,十进制间进行相互转换
- js进行二进制和十进制之间的相互转换
- 如何将二进制转换为八进制、十进制、十六进制
- 如何将十进制转换为二进制、八进制、十六进制
- [JAVA]二进制,八进制,十六进制,十进制间进行相互转换