Die Zahlen in heutigen CPUs kann man zwar als Dezimalzahl ausgeben und als Hexadezimalzahl schreiben, letztlich steht im RAM oder den Registern jedoch immer eine binäre Zahl.
Je nach dem "Level", von dem aus man die ganze Maschine betrachtet, tangiert einen das mal mehr, mal weniger. Beim Benutzen eines Smartphones etwa dürften die wenigsten Menschen dabei die Vorstellung haben, daß sie da gerade aktiv und selbstbestimmt Einzelbits durch das Gerät bewegen. Auf Assemblerebene ist man diesem Phänomen deutlich näher.
(Es ist übrigens auch gar nicht gesagt, daß das so bleiben muß. Man denke mal an Quantencomputer oder biologisch basierte Rechenmaschinen; und was die ScienceFiction sonst noch hergibt. Bei Flash Speichern (SSDs) ist so ein NICHT-Bit Zustand ja bereits heute Realität - neuerdings (2018) auch schon mit QuadLevelCells.)
Bits haben zwei wesentliche Grundeigenschaften. Sie sind binär - haben also nur 2 Zustände. Und sie sind, zumindest, wenn man sie irgendwie sinnvoll benutzen will, geordnet - besser: sie sind angeordnet.
(eine dritte Grundeigenschaft wäre evtl., daß sie quasi nicht-stofflich sind, und auch wenn sie tatsächlich "da" sind, etwa in einem Rechner, sie nie wirklich definiert "vorhanden" sind; etwa weil die Elektronenwolke, durch die sie gebildet werden, sich permanent verändert; sie sind quasi eine Idee, wie beim alten Platon, oder soetwas wie eine Note, die nur manifest wird, wenn sie jemand spielt (ob der/die den Ton trifft, ist dann eine weitere Frage)) und wo es nur recht Sinn macht, wenn sie zusammen mit anderen in einer (An-)Ordnung daherkommt)
Die Anordnung von Bits geschieht - wie bei den anderen Zahlensystemen und ihren Grundelementen auch - indem man ihnen Stellen mit einem Stellenwert zuweist.
Diese Anordnung ist nicht fix und wird bei fast allen Operationen damit irgendwie verändert.
(Ausnahmen wie ODER Verknüpfung mit #$00 sind natürlich vorhanden, unter Erhalt des Musters.)
Eine besonders spannende Frage bei Bits ist die nach ihrem aktuellen Zustand: "0" oder "1".
Dies hat vor allem etwas damit zu tun, daß Bits, aufgrund ihrer "binären" Eigenschaft, oft als eine Art virtueller Umschalter benutzt werden (können). Etwa direkt gekoppelt an einen Ausgang, der dann "real" etwas bewirkt, z.B. ein Relais schaltet (Stichwort GPIO) oder auch als Repräsentation eines anderen virtuellen Objektes, wie z.B. einem Pixel in einer Schwarz-Weiß Grafik (Stichwort Bitplane).
Die dabei auftretende Frage ist dann: Welchen Wert hat gerade das Element (Bit) in einer bestimmten Stelle einer Binärzahl ?
Diese Frage kann man so natürlich auch z.B. bei Dezimalzahlen stellen, allerdings gibt es dort wesentlich weniger Anwendungen dafür, da selten einmal eine Einzelstelle einer Dezimalzahl mit ihrem Wert für etwas anderes eingesetzt wird, als einfach nur Stelle in dieser Zahl zu sein.
Das ist bei Binärzahlen anders - weshalb sie sowohl als Muster als auch als Zahl gesehen werden müssen.
Nun sind bei den Logik-Befehlen schon Möglichkeiten aufgetaucht, diese Frage zu beantworten. Etwa ließe sich die Frage nach einem gesetzten Bit dadurch entscheiden, daß man mit einem Wert UND verknüpft, der lediglich dieses Einzelbit gesetzt hat - und alle anderen Bits auf "0". Nach der UND Verknüpfung sind auf jeden Fall zumindest alle Bits außer dem interessierenden gelöscht, da sie ja durch die Vorgabe der "0"en im Verknüpfungswert bei der UND Verknüpfung zu "0" werden müssen. Einzig das "interessierende Bit" bleibt potentiell erhalten. War es nun selbst nicht gesetzt ("0"), wird es auch durch UND Verknüpfung nicht seinen Wert ändern. War es dagegen gesetzt, wird es erhalten bleiben. Am Schluß kann man unterscheiden - hat die Gesamtzahl einen Wert anders als Null, war das Bit anfangs gesetzt. Ist das Ergebnis gleich Null, war das Einzelbit nicht gesetzt. (Und genau soetwas macht beim 6502 der BIT Befehl.)
(Übrigens: das funktionert also völlig unabhängig von den anderen Bits in der Zahl, denn diese sind ja bereits durch die UND Verknüpfung mit je einer "0" alle "stummgeschaltet". Man spricht dabei auch von: Ausmaskieren, sie wurden ausmaskiert.)
Nun ist UND zwar eine Operation, die mit allen CPUs machbar sein dürfte, es hat sich aber gezeigt, daß man durch Einbau einer relativ kleinen Zusatzhardware innerhalb der CPU den gleichen Effekt mit kleinerem Aufwand erreichen kann; zzgl. weiterer nützlicher Effekte. Diese Zusatzlogik ist der: SHIFTER.
Er macht auch genau, was sein Name sagt - er verschiebt, bringt an einen anderen Ort, verlagert, räumt um. Und zwar: Bits. Im allgemeinen macht er das auch nur in geordneter Form: er verschiebt die Bits in ihren Stellen um genau eine Position, und zwar alle Bits einer Binärzahl. Und auch alle in die gleiche Richtung, entweder zu der "höherwertigen" - das ist: nach links, oder zu den "niederwertigen" Positionen - nach rechts.
Aus einer
%00001010 wird so durch SHIFTen nach links eine
%0001010x und eine
%x0000101 durch SHIFTen nach rechts
Man sieht: Sämtliche Werte haben genau um eine Stelle nach links bzw. rechts gewechselt.
Dadurch wird aber natürlich an dem jeweilig entgegengesetzten Ende eine Stelle "undefiniert" - das "x".
Die Befehle, mit denen man den SHIFTER steuert, unterscheiden sich nun
a.) durch die Richtung und
b.) dadurch, mit welchem neuen Inhalt bzw. wie sie die verwaiste Stelle "x" füllen.
Interessant ist nun natürlich, daß man ja das "hinausgeschobene" Bit nicht sofort verwerfen muß, sondern dieses auch kurz zwischenspeichern und betrachten/auswerten kann. Damit ergibt sich nun auch die oben angesprochene Variante den Wert von Bits an bestimmten Stellen zu bestimmen - man verschiebt/shiftet das Bitmuster einfach solange bis das gewünschte Bit "aus der binären Zahl herausfällt".
Und der Gesamtzahlenwert ? Das wurde schon im Zahlensysteme-Thread gezeigt: Der verdoppelt sich natürlich, wenn man nach links schiebt (wobei hierbei auch das höchste Bit besonders beachtet werden muß) oder er halbiert sich, wenn nach rechts geschoben wird.