我的意思是:如果一個位元組的值為 255,我加 1。它再次變為 0。或者,如果我從零值中減去 1,它變為 255。我有很多代碼,它們處理這樣的位元組,我寧愿不篩選所有這些行來查找這種旋轉的出現
好吧,什么都沒有冒險,所有這些......
干杯強尼
編輯:只是一個愚蠢的例子:
Sub Tester()
Dim Arr(255) As Byte
Dim BytePointer As Byte = 200
Dim value As Byte
Arr(50) = 1
For i = 0 To 5000
BytePointer = BytePointer 1
value = Arr(BytePointer)
If value = 1 Then MessageBox.Show("Found 1")
Next
end sub
因此,它會導致溢位例外。
這可以不做:
BytePointer = (BytePointer 1) and &FF
uj5u.com熱心網友回復:
您沒有指定您使用的 BASIC,但此答案假定為 FreeBasic。
您應該將BytePointer變數宣告為UByte.
的數字范圍Byte是從 -128 到 127(“有符號”),但UByte它是 0 到 255(“無符號”),它很好地匹配了陣列邊界。
當您的代碼使用 初始化BytePointer變數時Dim BytePointer As Byte = 200,FreeBasic 已經將其設定為 -56,并且當您的代碼使用它遞增BytePointer變數時,BytePointer = BytePointer 1它變為 -55。
由于該索引 (-55) 超出范圍 (0,255),因此該指令value = Arr(BytePointer)不會尋址您的陣列元素。
下一個代碼作業正常,并且從 255 回到 0 的環繞沒有問題:
Dim Arr(255) As Byte
Dim BytePointer As UByte = 251
Dim value As Byte
Dim i As Integer
For i = 0 To 255
Arr(i)=i
Next
For i = 1 To 10
value = Arr(BytePointer)
Print BytePointer, value
BytePointer = BytePointer 1
Next
uj5u.com熱心網友回復:
好的....
通過“在高級編譯器選項對話框中洗掉整數溢位檢查”,您可以環繞位元組和整數,而不會出現溢位錯誤。
但它對整個專案都是如此。
我可以用這個...
遺憾的是,VB 不提供默認執行此操作的變數(我們稱它們為 winteger 或 wbyte)。(只是我的 2 美分……)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/473622.html
