您的位置:首页 > 其它

如何在PB中进行位操作以及二进制与十进制转换

2006-02-07 13:43 471 查看
一、编写十进制转换成二进制的函数

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
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐