Z jaką precyzją wykonywane są operacje arytmetyczne na liczbach całkowitych?
Z jaką precyzją wykonywane są operacje arytmetyczne na liczbach całkowitych?
Jeśli którykolwiek z operandów całkowitych jest typu long, to operacje arytmetyczne są wykonywane z precyzją 64 bitów. W pozostałych przypadkach operacje arytmetyczne na typach całkowitych są wykonywane z precyzją 32 bitów.
Można się o tym łatwo przekonać np. próbując skompilować poniższy kod:
byte b1 = 1;
byte b2 = 2;
byte b3 = b1 + b2; // błąd kompilacji
W ostatnim wierszu dostaniemy błąd kompilacji: "Type mismatch: Cannot convert from int to byte" oznaczający niezgodność typów i brak możliwości automatycznej konwersji typu int do byte. Wyrażenie po prawej stronie przyjmuje wartość 3, ale jest typu int i nie może być zawężone do typu byte.
Taka operacja jest możliwa tylko "na jawne życzenie" programisty. W takim przypadku należy kod poprawić, uzupełniając go o operację rzutowania:
byte b1 = 1;
byte b2 = 2;
byte b3 = (byte)(b1 + b2); // = 3