Wie maskiert dieser bitweise UND-Operator die niederwertigen sieben Bits der Zahl?

Lesezeit: 2 Minuten

Benutzer-Avatar
Aussenseiter

ich lese Die Programmiersprache C von Brian Kernigan und Dennis Ritchie. Hier ist, was es über den bitweisen UND-Operator sagt:

Der bitweise UND-Operator & wird oft verwendet, um einen Satz von Bits zu maskieren, z.

    n = n & 0177 

setzt alle bis auf die niederwertigen 7 Bits auf Null n.

Ich verstehe nicht ganz, wie es die Bits der unteren sieben Ordnung maskiert n. Kann bitte jemand aufklären?

  • 0177 ist oktal

    – Shafik Yaghmour

    9. August 2013 um 17:10 Uhr

  • Octal ist archaisch, heute würden Sie es verwenden 0x7f.

    – sternenblau

    10. August 2013 um 6:05 Uhr

Benutzer-Avatar
Sergej Kalinitschenko

Die Nummer 0177 ist ein oktal Zahl, die das folgende binäre Muster darstellt:

0000000001111111

Wenn du AND es mit der bitweisen Operation &behält das Ergebnis die Bits des Originals nur in den Bits, die auf gesetzt sind 1 in der “Maske”; alle anderen Bits werden Null. Denn “AND” folgt dieser Regel:

X & 0 -> 0 for any value of X
X & 1 -> X for any value of X

Wenn Sie zum Beispiel AND 0177 und 0545454du erhältst

0000000001111111 -- 0000177
0101010101010101 -- 0545454
----------------    -------
0000000001010101 -- 0000154

In C ein Integer-Literal mit dem Präfix 0 ist also eine Oktalzahl 0177 ist eine Oktalzahl.

Jede Oktalziffer (von value 0 zu 7) wird mit 3 Bit und dargestellt 7 ist der größte Wert für jede Ziffer. Also ein Wert von 7 in Oktal bedeutet 3 Bits gesetzt.

Seit 0177 ist ein Oktalliteral und jede Oktalzahl ist 3 drei Bits haben Sie die folgenden binären Äquivalente:

7  = 111
1  = 001

Was bedeutet 0177 ist 001111111 binär.

Es wurde bereits erklärt, dass das erste ‘0‘ benutzt für oktale Darstellung einer Zahl ein ANSI-C. Eigentlich die Nummer 0177 (oktal) ist gleich mit 127 (in Dezimalzahl), das heißt 128-1 und kann auch dargestellt werden als 2^7-1und 2^n-1 in binärer Darstellung bedeutet, nimm n Einsen und setze alle Einsen nach rechts.

0177 = 127 = 128-1

die ein Bitmaske;

000000000000000000000001111111

Sie können den Code unten überprüfen;

Demo

#include <stdio.h>

int main()
{
    int n = 0177;   // octal representation of 127
    printf("Decimal:[%d] : Octal:[%o]\n", n, n, n);

    n = 127;        // decimal representation of 127
    printf("Decimal:[%d] : Octal:[%o]\n", n, n, n);

    return 0;
}

Ausgabe

Decimal:[127] : Octal:[177]
Decimal:[127] : Octal:[177]

Benutzer-Avatar
Fräulein J.

0177 ist ein Oktalwert, jede Ziffer wird durch 3 Bits vom Wert 000 bis 111 dargestellt, also wird 0177 zu 001111111 (dh 001 | 111 | 111) übersetzt, was, wenn Sie es in 32-Bit-Binärform betrachten (kann auch 64-Bit sein, außer dem Rest der Ziffern werden gemäß dem MSB aufgefüllt, dh Vorzeichenbit in diesem Fall Wert 0) Form ist 0000000000000000000000001111111 und und eine bitweise Ausführung damit für eine gegebene Zahl gibt die unteren 7 Bits der Zahl aus, wobei der Rest der Ziffern in der n- Bitnummer auf 0.

(since x&0 =0 & x&1=x e.g 0&0=0 ,1&0=0, 1&1=1 0&1=1)

1371740cookie-checkWie maskiert dieser bitweise UND-Operator die niederwertigen sieben Bits der Zahl?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy