Thread ~- anstatt -- (10 answers)
Opened by leo11 at 2009-11-30 16:30

murphy
 2009-11-30 23:19
#128790 #128790
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
2009-11-30T21:33:46 leo11
[...]
Code: (dl )
1
2
3
$ perl -wle '$y=5; printf "%32b\n%32b\n", -$y, ~-$y;'
11111111111111111111111111111011
100

[...]
Kann man sagen, dass beide Zeilen in Zweierkomplementdartsellung sind, wobei erstere ganz links mit -2 hoch 32 beginnt und die zweite eine positive Zahl ist, da ganz links eigentlich eine 0 steht?

Der Begriff Zweierkomplementdarstellung ergibt eigentlich nur bei negativen Zahlen einen Sinn und trifft daher nur auf die erste der beiden angegebenen Binärdarstellungen zu.

Quote
Ist es außerdem richtig, dass ~ zwar eine bitweise Negation ist, aber kein Operator der für eine Wandlung in die Zweierkomplementdartsellung sorgt?

Umgewandelt wird bei Rechenoperationen mit ganzen Zahlen gar nichts, egal welcher Operator am Werk ist. Vielmehr liegen die Zahlen im Arbeitsspeicher und in den Registern des Prozessors immer als Binärdaten vor, wobei negative Zahlen als Zweierkomplemente gespeichert sind.

Quote
In der perlop steht:
Code: (dl )
Unary "~" performs bitwise negation, i.e., 1's complement. For example, 0666 & ~027  is 0640.

Wie kommt man hier auf die 0640?

Durch Ausrechnen — am einfachsten wieder in Binärdarstellung: #o666 & ~#o27 = #b110110110 & ~#b10111 = #b110110110 & #b...111101000 = #b110100000 = #o640

Quote
Außerdem sind doch im Dualsystem nur 1 und 0 erlaubt.

Im Oktalsystem, das in dem von Dir zitierten Codeschnipsel verwendet wird, sind ferner die Ziffern 2 bis 7 erlaubt.

Quote
Bedeutet 1's complement, das der operator ein Zweierkomlement in ein Einerkomplement wandelt?

Es bedeutet, dass der Operator ein Einerkomplement berechnet. Der Begriff Einerkomplement ist ein Synonym für bitweise Negation.


(Verwendete Konvention: #o = Zahl folgt in Oktaldarstellung, #b = Zahl folgt in Binärdarstellung)
When C++ is your hammer, every problem looks like your thumb.

View full thread ~- anstatt --