Fuente/ Codesnippets | | | | p.specht
| El en XProfan-11 eingebaute Not()-Función arbeitet en Logisch 1 (Wahr) oder 0 (falso) hin. Ein Binäres NOT debería dagegen el bits uno Integerzahl invertieren. Un matemático Versión des binären NOT podría folgendermaßen lauten:
Elegant es el pero no gerade. Ersatzweise puede binäre Not en XProfan-11 aber z.B. auch por una Xor(,) erreicht voluntad. En signed Integers kehrt el allerdings el Vorzeichen en.
Eventuell kann beim Löschen des n. bits (0..31) uno Integerzahl x& folgendes verwendet voluntad (XProfan sabe dazu aber auch propio bit-Manipulationsbefehle):
Ist el Integerzahl gerade oder ungerade?:
Ist bit n& (0..31) en el Integerwert x& gesetzt?
Ändere ("Toggle") el n. bit en el Integerwert x&
Lösche el jeweils rechteste 1-bit:
Isoliere el al weitesten rechts stehende 1-bit:
Schalte todos bits rechts vom actualmente rechtesten en 1 (es no 'rechteste 1' disponible, schalte ALLE en 1)
Isoliere el al weitesten rechts stehenden 0-bit (= Zeige con uno 1 darauf):
Schalte el rechteste 0-bit en 1:
Ist una Zahl una Zweierpotenz (= 2 hoch Integerzahl zw. 0 y 31)? (Vorsicht: 0 se hier fälschlicherweise como una 2-hoch Zahl behandelt!)
Den rechtesten zusammenhängenden Block de 1-bits en 0-bits conjunto:
Schnelles Zählen el 1él-bits:
Quelle u.a.: [...] |
| | | Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 14.05.2021 ▲ |
| |
| | p.specht
| Hier todavía una kleiner Trick para Austausch ganzer Bit-Gruppen:
|
| | | XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 22.05.2021 ▲ |
| |
| | p.specht
| Bits umdrehen ============= Manchmal verhält se Selbstbau-Peripherie verkehrt. Auf el Gründe möchte Yo hier no más eingehen ... El Solución liegt en uno schnellen Proc, el el bit-Reihenfolge innerhalb uno 4-Byte Largo-Variable& umkehrt. Das Ejemplo es ligeramente a otro Gegebenheiten (Nibble, Byte, Word, mittels Erweiterung auch en Quadword) anpassbar... - oder auch a el Tausch größerer Einheiten en el Bitfolge, z.B. el Bytes en un DWord.
Windowtitle " Reverse DWord bits en 5 Lines of Code"
'Q: https://graphics.stanford.edu/~seander/bithacks.html#ReverseParallel
'Transscript CPP to XProfan-11.2a, 2018-03 by P.Pájaro carpintero, Vienna/Austria
Ventana de Estilo 24:CLS:font 2:imprimir
Declarar b&,v&' 32-bit doubleword to reverse bit order
Proc ReverseBits :parámetros v&
v& = ((v& >> 1) & $55555555) | ((v& & $55555555) << 1)
v& = ((v& >> 2) & $33333333) | ((v& & $33333333) << 2)
v& = ((v& >> 4) & $0F0F0F0F) | ((v& & $0F0F0F0F) << 4)
v& = ((v& >> 8) & $00FF00FF) | ((v& & $00FF00FF) << 8)
v& = ( v& >> 16 ) | ( v& << 16)
volver v&
ENDPROC
Proc showBits :parámetros v&
imprimir " %";right$(mkstr$("0",31)+bin$(v&),32)
ENDPROC
Proc checkrev :parámetros b&,v&
whileloop 0,31:ifnot testbit(b&,&Loop)=testbit(v&,31-&Loop)
imprimir " Bit",if(&Loop<10," ","");&Loop,"not reversed!":endif
endwhile:imprimir "\n +++"
ENDPROC
Begin:
b& = %01100100101100111010101010101111 : showbits b& : imprimir
v& = ReverseBits(b&) : showbits v&
CheckRev b&,v&
waitinput
End
|
| | | XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 26.05.2021 ▲ |
| |
| | p.specht
| RotateLeft, RotateRight ===================== Shiftbefehle existieren en XProfan, Rotate-Befehle no. Das ändern wir ahora, zumindest qué Rotation sin Einbeziehung uno zusätzlichen Carry-bits betrifft: El Rotationsweite es de 1 a 31 ajustable (sinnvoll jeweils sólo a max. 15, darüber hinaus debería uno simplemente el Rotationsrichtung ändern). Auch el Bitbreite el Rotation es zwischen 32 bit a 2 bit herunter ajustable.
cls:font 2
var x&=%00100111
var n&= 1'[1..31]
var w&=32'[2..32]
var nu$="00"
proc RotL :parámetros x&,n&,w&
volver (x&<<n&) | (x&>>(w&-n&))
ENDPROC
proc RotR :parámetros x&,n&,w&
volver (x&>>n&) | (x&<<(w&-n&))
ENDPROC
nu$=mkstr$("0",w&)
mientras que 1
locate 2,2
imprimir right$(nu$+bin$(x&),w&)
sound 300,30
waitinput 1000
x&=RotL(x&,n&,w&)
wend
RotateWide encima 2 x 32 bit ======================= XProfan-11 kannte todavía no QuadInt, aber manchmal puede ser se como con zwei einfachen Int behelfen. Unelegant, aber como Demo muss lo reichen:
cls:font 2
declarar x&,y&,a&,b&,c&,d&,w&,n&,nu$
w&=32'2..32
nu$=mkstr$("0",w&)
n&=1
x&=%10101001100011100001111
repeat
locate 2,2
imprimir translate$(right$(nu$+bin$(y&),w&)+":"+right$(nu$+bin$(x&),w&),"0","°")
waitinput 400
ROTLw
until 0
Proc ROTRw
a&=x&>>n&
b&=x&<<(w&-n&)
c&=y&>>n&
d&=y&<<(w&-n&)
x& = a& | d&
y& = b& | c&
ENDPROC
Proc ROTLw
a&=x&<<n&
b&=x&>>(w&-n&)
c&=y&<<n&
d&=y&>>(w&-n&)
x& = a& | d&
y& = b& | c&
ENDPROC
Nochmal rotieren dejar, diesmal encima 3 DWords. Braucht garantiert keiner...
Ventana 0,0-%maxx,100
font 2
declarar x&,y&,z&,a&,b&,c&,d&,e&,f&,w&,n&,nu$
w&=32'2..32
nu$=mkstr$("0",w&)
n&=1
x&=%10101001100011100001111
repeat
locate 2,2
imprimir translate$(\
right$(nu$+bin$(z&),w&)+"."+\
right$(nu$+bin$(y&),w&)+"."+\
right$(nu$+bin$(x&),w&)\
,"0","°")
waitinput 20
ROTLw
until 0
Proc ROTRw
a&=x&>>n&
b&=x&<<(w&-n&)
c&=y&>>n&
d&=y&<<(w&-n&)
e&=z&>>n&
f&=z&<<(w&-n&)
x& = a& | d&
y& = c& | f&
z& = e& | b&
ENDPROC
Proc ROTLw
a&=x&<<n&
b&=x&>>(w&-n&)
c&=y&<<n&
d&=y&>>(w&-n&)
e&=z&<<n&
f&=z&>>(w&-n&)
x& = a& | f&
y& = c& | b&
z& = e& | d&
ENDPROC
|
| | | Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 27.05.2021 ▲ |
| |
| | p.specht
| ROR32 / ROL32 en "unsigned Integers" ================================ Mein Routinenvergleich ha actualmente folgende Favoriten (~31 µs/Rotation), Überdrehungs-verifiziert de -1024 a +1024 Rotationsschritten:
|
| | | Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 30.05.2021 ▲ |
| |
| | p.specht
| El 8 bits en un Byte mittig spiegeln ================================
Simpler Bit-Reverser para 32-bit (signed or unsigned) Integers ============================================ El nachstehende Proc samt Testprogramm spiegelt todos bits uno XProfan 32-bit Integervariable a el Mitte. Beschleunigungsversuche a la C++ Code verliefen a dato aber negativo, como se Shift-Left en negativen Shift-Schritten - anders como en C - no umkehrt. El Sache hier es ausgiebig getestet, restos aber todavía sin jede Gewähr!
|
| | | XProfan 11Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'... | 30.05.2021 ▲ |
| |
|
Zum QuelltextThemeninformationenDieses Thema ha 1 subscriber: |