Sind 'neben' und ""Bitweises oder" das gleiche in diesem Fall?
Sagen, ich habe vier 32-bit-zahlen, die so definiert werden, dass Ihre bits nicht überlappen, d.h.
unsigned long int num0 = 0xFF000000;
unsigned long int num1 = 0x00FF0000;
unsigned long int num2 = 0x0000FF00;
unsigned long int num3 = 0x000000FF;
Wo in jeder Nummer hätte man nichts an die Stelle der FF
s.
Bin ich zu Recht sagen, dass neben und bitweise oder würde immer die gleiche Ausgabe erzeugen, für eine solche Art von zahlen?
Dank!
- Als Dritte alternative könnten Sie auch die Verwendung des exklusiv-oder, das heißt, die
^
Betreiber. - Aber beachten Sie, dass wenn Sie möchten, kombinieren Sie diese zahlen in eine es ist guter Stil zu verwenden
|
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
so lange wie für zwei zahlen num1 und num2 gilt
num1 & num2 == 0
, dann folgt:num1 + num2 == num1 | num2
der Grund dafür ist, dass neben der ist im Grunde ein Bitweises XOR, plus carry-bit. Aber solange es keine carry-bits (
num1 & num2 == 0
) dann zusätzlich darauf an, Bitweises XOR, das ist (wieder wegen dernum1 & num2 == 0
) in diesem Fall logisch äquivalent zu einer bitweisen ODER -XOR
plus ein carry?Ja, wie (gesehen bitweise)
0+1
ist das gleiche wie0|1
. Der einzige Unterschied ist1|1 (=1)
vs.1+1(=0b10)
, d.h. erstellen Sie eine 0 und overflow, die die bits auf der linken Seite).Also in deinem Fall beide sind gleichwertig. Aber Sie sollten auf der sicheren Seite und wählen, die weniger fehleranfällig ein.
No:
Natürlich, so lange wie Sie sicherstellen, dass Sie nur fügen Sie die Dinge zusammen, wo Sie wissen, dass Sie nicht die gleichen bits gesetzt, sollten Sie sicher sein.
|
für logische Ausdrücke. - Im Gegensatz zu, wenn Sie wirklich die Berechnung ein, d.h. in Fällen, in denen, sagen wir, die dezimal-Darstellung auch Sinn macht.Solange Sie nicht etwas tun, wie
num3 + num3
ja.Wann immer die bitweise addition fügt hinzu, mehr als eine 1 (weil entweder die Quellen haben, oder die von einem anderen Ort, ist 1), dann einen übertrag erzeugt wird und an einem Ort wirkt sich auf die anderen. Solange in einem weiteren gibt es höchstens eine 1 Hinzugefügt, die Dinge sind das gleiche wie Bitweises oder.
Dies kann auch gesehen werden, wenn wir uns an die Addierer-schaltungen (http://en.wikipedia.org/wiki/Adder_%28electronics%29), wo, wenn kein carry erzeugt wird, alle Elemente nehmen Teil in der Schaltung sind die "oder" - Elementen.
Neben-und bit-Weise oder wäre das gleiche als bit-Weise oder würde gehören, alle bits in beiden, und normal, außerdem würde genau das gleiche tun angesichts der sich gegenseitig ausschließenden Natur des bits.