Mam dość podstawowe pytanie, ale nie jestem pewien, czy rozumiem tę koncepcję, czy nie. Załóżmy, że mamy:Mnożenie dwóch liczb całkowitych w C++
int a = 1000000;
int b = 1000000;
long long c = a * b;
Kiedy uruchamiam to, c pokazuje wartość ujemną, więc zmieniłem również aib na długi, długi i wtedy wszystko było w porządku. Dlaczego więc muszę zmienić aib, gdy ich wartości są w zakresie int, a ich produkt jest przypisany do c (która jest długa)?
Używam C/C++
w ints nie są promowane na długo na długo przed mnożeniem, oni pozostaną także ints i produkt. Następnie produkt jest rzucany na długo, ale zbyt późno, nadszedł uderzenie. Posiadanie jednego z a lub b long long powinno również zadziałać, podobnie jak inne będą promowane. –
Powinieneś oznaczyć język programowania, którego używasz, ponieważ różne języki mogą wprowadzać inne zachowanie;) – alfasin
W zależności od tego, która maszyna i wersja C, której używasz, ma rozmiar "int", może również ulec zmianie. – Jay