在VB裡怎麼實現移位的算術運算操作

2021-07-14 09:17:06 字數 2063 閱讀 2985

vb沒有提供移位操作的指令和函式,只提供and(與)、or(或)、xor(異或)、eqv(同或)、not(非)等幾個運算子,而程式設計時有時需要對乙個位元組進行移位操作(如進行加密),怎麼辦?其實只用and、or二個運算子即可搞掂。例如要將變數byte1的第八位置1(假設byte1的二進位制值為01001101),則只需byte1 or &h80 (即01001101 or 10000000),如要將第八位置0,則只需byte1 and &h7f。請看下面程式段是如何實現循

環左移的:

public function byteleft(byte1 as byte, n as integer) as byte `將byte1左移n位

dim intem as byte `臨時變數

dim intem1 as byte `臨時變數

dim x, y as integer

intem1 = byte1

for x = 1 to n `移多少位就迴圈多少次

for y = 8 to 1 step -1 `從第八位(左邊第一位)開始迴圈左移

select case y

case 8

if (intem1 and &h80) = &h80 then `如果臨時變數intem1的第八位是1,

intem = &h1 `則將臨時變數intem置1,

else

intem = &h0 `反之置0

end if

case 7

if (intem1 and &h40) = &h40 then `如果臨時變數intem1的第七位是1,

intem1 = intem1 or &h80 `則將其第八位置1(其它位不變),

else

intem1 = intem1 and &h7f `反之將第八位置0(其它位不變)

end if

case 6

if (intem1 and &h20) = &h20 then `操作與上面相同

intem1 = intem1 or &h40

else

intem1 = intem1 and &hbf

end if

case 5

if (intem1 and &h10) = &h10 then

intem1 = intem1 or &h20

else

intem1 = intem1 and &hdf

end if

case 4

if (intem1 and &h8) = &h8 then

intem1 = intem1 or &h10

else

intem1 = intem1 and &hef

end if

case 3

if (intem1 and &h4) = &h4 then

intem1 = intem1 or &h8

else

intem1 = intem1 and &hf7

end if

case 2

if (intem1 and &h2) = &h2 then

intem1 = intem1 or &h4

else

intem1 = intem1 and &hfb

end if

case 1

if (intem1 and &h1) = &h1 then

intem1 = intem1 or &h2

else

intem1 = intem1 and &hfd

end if

if intem = &h1 then `移完第一位後,如果intem是1(即第八位是1)

intem1 = intem1 or &h1 `則將intem1的第一位置1

else

intem1 = intem1 and &hfe `反之置0

end if

end select

next y

next x

byteleft = intem1 `將intem1的值返回給函式名

end function

參照此程式段,不難實現迴圈右移。

在OpenCV裡實現算術編碼2

由於前面算術編碼是採用浮點數,而由於浮點數的精度有限,所以要表示的位數有限,導致可以壓縮的內容不多。那麼就需要採用二進位制的方式來表示小數,這樣就可以表示很長的小數了。不過在計算的過程中會出現相互接近的現象,所以增加了四分之一和四分之三的處理,這樣才可以避開對半時不能判斷的現象。可以採用python...

在OpenCV裡實現開運算

前面學習腐蝕和膨脹演算法,並且深刻地認識到它們的特性以及作用。如果由這兩種組合出來的運算又有什麼樣的不同呢?比如乙個影象先腐蝕後膨脹的操作,會有什麼結果呢?因為腐蝕是把白色變小,膨脹又是把白色變大,是否會保持原圖不變呢?帶著這些問題來研究一下先腐蝕後膨脹的演算法,我們把這樣的演算法叫做開運算,在數學...

在C 裡怎麼重寫已實現的介面

本文通過虛函式來實現介面在繼承類裡的重寫。實現語言為c 通常如果我們定義了乙個介面如下 inte ce imyinte ce void foo int i 然後我們在類base裡實現了此介面,如下 class myclassbase protected void foo int i private ...