Code: Select all
Procedure ShiftBetweenBits(Value, First, Last)
Last+1
a=(1<<First)
b=(1<<Last)
preserved=value & ~(b-a)
value=(value &(b-a))<<1
If (value & b) : value>>(Last-First) : EndIf
ProcedureReturn value|preserved
EndProcedure
CompilerIf #PB_Compiler_IsMainFile
a=%0001
For i=1 To 6
Debug Bin(a)
a=ShiftBetweenBits(a, 0, 2)
Next
Debug ""
a=%100
For i=1 To 10
Debug RSet(Bin(a), 16, "0")
a=ShiftBetweenBits(a, 2, 6)
Next
Debug ""
a=%1110000111
For i=1 To 10
Debug RSet(Bin(a), 16, "0")
a=ShiftBetweenBits(a, 2, 6)
Next
CompilerEndIf
CompilerIf #PB_Compiler_IsMainFile
Enumeration
#Is_User =1
#Is_Weak ;=2 <----------- first bit
#Is_Strong ;=3
#Is_AllMighty;=4 <----------- last bit
#Is_Monster ;=5
#Iam =1 << #Is_User
#Weak =1 << #Is_Weak
#Strong =1 << #Is_Strong
#AllMighty =1 << #Is_AllMighty
#Monster =1 << #Is_Monster
EndEnumeration
status = #Iam | #Weak | #Monster
For i=1 To 6
If status & #Iam : result$="I am " : EndIf
If status & #Weak : result$+"a weak " : EndIf
If status & #Strong : result$+"a strong " : EndIf
If status & #AllMighty : result$+"a allmighty " : EndIf
If status & #Monster : result$+"Monster!" : EndIf
Debug result$
status=ShiftBetweenBits(status, #Is_Weak, #Is_AllMighty)
Next
CompilerEndIf