Sign Extend 9-Bit in C
In diesem Tutorial erfahren Sie, wie Sie eine 9-Bit-Ganzzahl in C signieren und erweitern. Zunächst müssen wir wissen, was genau das Vorzeichen ist.
Was ist Sign Extend
Vorzeichenerweiterung bezieht sich auf das Erweitern einer Zahl unter Beibehaltung ihres Vorzeichenbits, z. B. durch Wechseln von 32-Bit zu 64-Bit. Das Vorzeichenbit ist bei den heute verwendeten Zahlenformen immer das höchste.
Das ist nur eine Frage der Tradition, aber soweit wir wissen, ist es immer so. Dies weist darauf hin, dass wir den Teil der kritischsten Zahl an die neue höchste Stelle verschieben müssen, während die Integrität der anderen Teile der Zahl gewahrt bleibt.
Zeichenerweitern einer 9-Bit-Ganzzahl in C
Einige bitweise Operatoren in der Programmiersprache C arbeiten auf Hardwareebene. Um diese Operatoren zu verwenden, ist es jedoch notwendig, die Architektur des Speichers zu verstehen und wie C Daten im Speicher speichert.
Struktur:
- Der Speicher ist für jedes Zeichen vom Typ
char
in 1 Byte unterteilt. - Die Speicherstruktur vom Typ
int
besteht aus 4 Bytes. - Ein Speicherplatz vom Typ
short
besteht aus 2 Bytes.
Die Informationen zum Zeichen finden Sie ganz links. Die Zahl 1 steht für eine negative Zahl, während die Zahl 0 für eine positive Zahl steht.
Schauen wir uns das folgende Beispiel an, um besser zu verstehen, was besprochen wird.
Zunächst erstellen wir in der Klasse main()
eine Variable vom Typ short
und geben ihr den Namen val
. Wir werden die Variable dann auf die gleiche Weise wie unten zuweisen.
short val = 234;
Danach geben wir den von uns erstellten short
-Wert zusammen mit einer 9-Bit-Zahl an die Variable namens res
weiter.
int res = val & 0b0000000111111111;
Es wird eine if
-Prüfung angewendet. Dies prüft, ob das Vorzeichenbit, das das höchste Bit ist, das Sie behalten (0x100)
, gesetzt ist, und wenn dies der Fall ist, setzt es alle Bits, die danach kommen.
if (val & 0x100) {
res = res | 0xFE00;
}
Erläuterung:
Wir haben eine val
-Variable erstellt, eine kleine Ganzzahl mit 16 Bit im Speicher. Der &
-Operator wurde dann verwendet, um die neuesten 9-Bits zu maskieren.
Es ist der AND
-Operator, der bei bitweisen Operationen verwendet wird, und sein Prozess ist wie unten beschrieben.
X Y res
0 0 0
0 1 0
1 0 0
1 1 1
-
Das
res
steht für das Ergebnis, währendX
undY
für die vielen Eingabemöglichkeiten stehen. Die Berechnung erfolgt Stück für Stück.Es wird nur dann eine 1 erzeugt, wenn beide Bits mit dem gleichen signifikanten Wert 1 sind.
-
Daher können wir die letzten 9 Bits des Wertes des bitweisen
AND
-Operators trennen, und der Rest der Bits wird auf 0 gesetzt. Der Wert0b0000000111111111
entspricht der binären Darstellung.Dies zeigt, dass nur die letzten 9 Bits eine 1 enthalten, während der Rest eine 0 enthält. Die Variable
res
wird mit dem Ergebnis aktualisiert. -
Danach haben wir eine
if
-Prüfung verwendet, um das erste Bit zu verifizieren. Wenn es 1 war, haben wir es zum Ergebnis hinzugefügt. Ansonsten belassen wir es bei 0.
Zu diesem Zweck haben wir wieder den bitweisen AND
-Operator verwendet und dieses Mal nur das erste Bit extrahiert, und wenn die Antwort 1 ist, dann das |
verwendet. -Operator, der der bitweise ODER
-Operator ist und wie folgt funktioniert.
X Y res
0 0 0
0 1 1
1 0 1
1 1 1
-
res
ist die Ausgabe undX
undY
sind die Eingabemöglichkeiten. Es wird Stück für Stück berechnet.Er gibt nur 0 aus, wenn beide gleichwertige Bits 0 sind. In der
if
-Anweisung wird das Ergebnis dieses Operators ausgewertet.Wenn
true
, wird der bitweiseOR
-Operator verwendet, um 1 in das am weitesten links stehende Bit des Ergebnisses einzufügen. -
0xFE00
ist die hexadezimale Darstellung der Binärzahl und wird verwendet, um die Bits darüber zu setzen, wenn ein Vorzeichenbit vorhanden ist.
Durch die Verwendung des bitweisen Operators in C können wir eine Vielzahl anderer Dinge ausführen. Es gibt viel mehr bitweise Operatoren in C als bitweises AND
und bitweises OR
.
Es gibt ein bitweises XOR
, das als ^
-Symbol dargestellt wird. Das Symbol ~
steht für einen bitweisen NOT
-Operator.
Das Zeichen >>
kennzeichnet einen Linksverschiebungsoperator. Die richtige Verschiebung können Sie mit dem <<
-Symbol vornehmen.
Mit Hilfe dieser Operatoren können Sie diese oder jede andere gewünschte Aufgabe auf vielfältige Weise erledigen.
Vollständiger Quellcode:
#include <stdio.h>
int main() {
short val = 234;
int res = val & 0b0000000111111111;
if (val & 0x100) {
res = res | 0xFE00;
}
return 0;
}
I have been working as a Flutter app developer for a year now. Firebase and SQLite have been crucial in the development of my android apps. I have experience with C#, Windows Form Based C#, C, Java, PHP on WampServer, and HTML/CSS on MYSQL, and I have authored articles on their theory and issue solving. I'm a senior in an undergraduate program for a bachelor's degree in Information Technology.
LinkedIn