Próbuję zrozumieć, co dokładnie zwraca bitowego operatora dopełnienia w C. (. Nie chodzi o „których wartość”, ale z punktu widzenia „który typ danych” Chyba rozumiem, jak bit stanowić uzupełnienie theorethically działa, więc nie ma potrzeby, aby reexplain że)Co to jest typ danych zwracany przez operację sumowania bitowego?
Rozważmy następujący kod:
int main(int argc, char **argv){
char c = 'A';
printf("%d, %d\n", sizeof(c), sizeof(~c));
return 0;
}
Podczas gdy pierwszy sizeof() zwraca 1, ten ostatni zwraca 4 na moim komputerze.
Moje pytanie brzmi: którego typem danych jest ~ c?
Pracuję na 32-bitowym systemie Linux, czy wynik zmieniłby się na 8, gdybym pracował na maszynie 64-bitowej? Zgaduję, że operacja bitowa jest stosowana do rejestru, a wartość zwracana nie jest zwracana do wartości char. Czy to zachowanie może być inne w przypadku innych kompilatorów, czy też standard C określa, co jest zwracane przez ~ c?
'~' jest 1 jest uzupełnieniem, a nie 2 jest uzupełnieniem –
Możliwy duplikat [Co się dzieje z operatory bitowe i całkowite promocje?] (http://stackoverflow.com/questions/30473958/what-is-going-on-with-bitwise-operators-and-integer-promotion) –