two's complement negative Zahlen darzustellen Unter der Annahme, (das ist, was Ihre Maschine verwendet höchstwahrscheinlich):
0b11111101
ist -3, nicht -125.
0b10000011
wäre -125 während 0b00000011
würde 3. sein
Sie scheinen sign-magnitude werden unter der Annahme, was sehr ungewöhnlich ist.
Der Operator ~
dreht alle Bits um, aber was diese Bits für negative Zahlen bedeuten, hängt von Ihrem System ab. C erlaubt drei verschiedene Darstellungen: Vorzeichengröße, ones' complement und Zweierkomplement. In der Praxis wird fast immer Zweierkomplement verwendet.
Auch C kann auf char
s nicht wirklich funktionieren. Wenn Sie versuchen, einen char
Wert in einem Ausdruck zu verwenden, wird es zunächst zu int
heraufgestuft. Also, was in ~i
eigentlich los ist ist:
- Der Wert von
i
gelesen (char
2).
- Es wird in
int
(int
2) konvertiert.
- Alle Bits werden gewendet (
int
0b1111111....111101
, abhängig davon, wie viele Bits Ihre int
s haben (normalerweise 32 oder 64)).
- Die Bits werden entsprechend der Zweierkomplementdarstellung entsprechend -3 interpretiert.
In diesem Fall ist das Ergebnis das gleiche, als wenn Sie den Vorgang zunächst auf char
getan haben, konvertierten dann das Ergebnis zu int
, so dass es keinen Unterschied macht, aber das ist, wie C es tut.
'11111101' ist' -3' –
Bitte lesen Sie auch über zwei ergänzen. – taskinoor
Es funktioniert gut – RSon1234