User since
2003-08-18
142
Artikel
BenutzerIn
Vielen Dank !
Sehr elegante Lösung - wenigstens bin ich beruhigt, daß es nicht so trivial war, wie anfangs befürchtet. Bitschieben mag ich nicht in Perl.
User since
2003-08-04
7321
Artikel
ModeratorIn
[quote=weismat,28.08.2003, 10:30]Bitschieben mag ich nicht in Perl.[/quote]
unterscheidet sich ja zu keiner anderen sprache...
zumindest von keiner die ich kenne ... außer ASM natürlich!
User since
2003-08-04
5873
Artikel
ModeratorIn
Das stimmt zwar, aber irgendwie mochte ich es in C auch lieber, das Bitschubsen...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-29
347
Artikel
BenutzerIn
Bitte, steinigt mich, aber ich hab ehrlich keine Ahnung,
für was man Bitweise Operatoren braucht. Ich habs bis
jetzt nie wirklich (=> garnicht) gebraucht. :blush:
Wäre nett wenn mir mal jemand ein triviales Beispiel
geben könnte :)
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...
User since
2003-08-04
7321
Artikel
ModeratorIn
tja...
bit-operationen braucht man oft, um verschiedene binaere format zu lesen...
dabei hat man in einem octet (byte) 8 bits
00000000 => kein bit ist gesetzt
00000001 => 1. bit ist gesetzt
00000010 => 2. bit ist gesetzt
00000100 => 3. bit ist gesetzt
00001000 => ...
da man so eine bit-zahl auch im dezimalensystem darstellen kann, kann man nun z.B. mit Hilfe des & operators testen, ob und welche bits gesetzt sind...
($byte & 1) ergibt immer dann einen Wert != 0, wenn das 1. bit gesetzt ist, bsp.:
00000001
00000011
00000101
00001001
00100001
etcpp.
($byte & 4) hingegen, prüft jetzt nicht, ob dass 4., sondern ob das 3. bit gesetzt ist, weil 4 im binaersystem 100 also
00000100
mit 255 kann man dann testen, ob alle bits gesetzt sind, denn
255 <=> 11111111
um nun ein octet zu erzeugen, dass verschiedene bits gesetzt hat, kann man folgendes tun:
$byte = 3 | 11 | 114
$byte sieht binaer jetzt so aus: 01111011
um jetzt sicher zustellen, dass das 1. und 2. bit nicht gesetzt ist, kann man den ~-operator verwenden
$byte = 3 | 11 | 114
$byte = $byte & ~3
binaer sieht das so aus:
$byte <=> 01111011
3 <=> 11
~3 <=> 00
$byte <=> 01111000
Nix verstanden, oder? :)
User since
2003-08-18
142
Artikel
BenutzerIn
An Eisbeer:
Das mit den Bits ist für mich immer ein Zeichen, daß etwas nicht gescheit gekapselt ist - meist braucht man das nur, wenn man fast direkt mit dem Betriebssystem spricht.
An Esskar:
Du hast das klasse erklärt und mit guten Beispiele gewürzt.
User since
2003-08-04
2145
Artikel
ModeratorIn + EditorIn
[quote=esskar,11.09.2003, 02:45]binaer sieht das so aus:
$byte <=> 01111011
3 <=> 11
~3 <=> 00
$byte <=> 01111000[/quote]
Nicht ganz. Hier muss man wirklich mehr Stellen hinschreiben, um das Einerkomplement ~3 sehen zu koennen. Ansonsten klappt auch das bitweise UND nicht.
3 <=> 00000011
~3 <=> 11111100
$byte <=> 01111011
$byte & ~3 <=> 01111000
User since
2003-08-04
7321
Artikel
ModeratorIn
@dubu: stimmt. bin letzte zeit so unkonzentriert!
User since
2003-08-04
5873
Artikel
ModeratorIn
Binäre Operatoren braucht man, wenn man (oft betriebssystemnah) bestimmte Eigenschaften oder Attribute von Dingen prüfen möchte, die nur eine Statusvariable von sich geben und nicht ein Array oder gar ein Hash, wo die Informationen schon getrennt mit 0 oder 1 belegt sind.
Ein anderer Anwendungfall sind Multiplikationen oder Divisionen mit Zweierpotenzen, diese lassen sich schneller durch Bitschieben erledigen.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-29
347
Artikel
BenutzerIn
Danke danke danke :)
Ich kenne ja das binäre Pipapo eigentlich (
eigentlich ;) ), wollte nur wissen
was die Operatoren bedeuten, vielen dank esskar, super erklärt!
:D
Die meisten PC Probleme befinden sich zwischen Bildschirm und Stuhl...