[C++] Odejmowanie liczb unsigned int
Ostatnio zmodyfikowano 2013-10-05 21:10
m7s1994 Temat założony przez niniejszego użytkownika |
[C++] Odejmowanie liczb unsigned int » 2013-10-05 16:05:41 Witam :) ***PIERWSZY PROGRAM*** #include<iostream> using namespace std; int main() { unsigned char x = 2; unsigned char y = 3; cout << x − y << endl; return 0; } ***DRUGI PROGRAM*** #include<iostream> using namespace std; int main() { unsigned int x = 2; unsigned int y = 3; cout << x − y << endl; return 0; }
Programy różnią się typami zmiennych, pierwszy wyświetla mi -1, a drugi jakąś zupełnie inną liczbe. Mógłby ktoś wytłumaczyć mi dlaczego tak się dzieje, że jeśli zmienne będa typu unsigned char to wszystko działa jak należy, ale jeśli są typu unsigned int to program wyświetla bzdury? |
|
Monika90 |
» 2013-10-05 21:10:46 Program nie wyświetla bzdur.
unsigned char jest (w twojej implementacji) promowane do int, odejmowanie jest wykonane w typie int i wynik też jest typu int.
Natomiast unisgned int nie podlega promocji, odejmowanie używa arytmetyki bez znaku i wynik jest typu unsigned int. Unsigned int nie może mieć wartości -1, zamiast -1 dostaniesz 232 - 1 na 32-bitowym komputerze, albo 264 - 1 na 64-bitowym. |
|
« 1 » |