0
a unterzeichnet int
(wenn man es wollte wäre nicht signiert, würden Sie schreiben 0U
) und daher ~0
ist auch eine signierte int
.
Wenn Ihre Maschine eine Zweierkomplement-Darstellung verwendet, hat diese den Wert -1. Die große Mehrheit der Maschinen - möglicherweise alle Maschinen, die Sie jemals in Ihrer Karriere sehen werden - sind Zweierkomplemente, aber technisch gesehen kann ~0
undefiniertes Verhalten hervorrufen, wenn Sie es auf einer Maschine verwenden, die 1'-Komplement-Darstellung von Ganzzahlen mit Vorzeichen verwendet und das verbietet auch negative Nullen.
Auch wenn es nicht wichtig ist, ist es eine gute Idee, sich nur mit vorzeichenlosen Integer-Typen mit bitweisen Operatoren zu beschäftigen.
beachten, dass die Bit-Operatoren „die ganze Zahl Aktionen“ auf ihre Operanden durchzuführen, was bedeutet, dass mit und ohne Vorzeichen short
und char
werden, um automatisch gefördert int
- nichtunsigned int
(es sei denn, es kommt vor, dass short
die gleiche Breite wie int
) - so kann eine explizite Umwandlung in unsigned
notwendig sein.
Starten Sie [hier] (https://en.wikipedia.org/wiki/Two%27s_complement). – user3386109