Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

WifiAvivi avatar WifiAvivi 151 Точки

Защо long-a ми превърта?

using System;

class Program
{
    static void Main()
    {
        int a = 1000000;
        int b = 1000000;
        long c = a * b;
        Console.WriteLine(c);  //overflow

        int a1 =  1000000;
        long b1 = 1000000;
        long c1 = a1 * b1;
        Console.WriteLine(c1);  //correct
    }
}

Нали уж long-а приема произведението на два int-а, които не го препълват.

Тагове:
0
Programming Fundamentals
psdimitrov avatar psdimitrov 75 Точки
Best Answer

Точно така!

При първия случай и двата множителя са от тип int. Това, което става е, че резултата от умножението първо се пресмята като тип int (получава се препълването) и след това се присвоява на променливата от тип long

При втория случай обаче, тъй като единия ти множител е long, другият имплицитно се конвертира също в long като и резултата е long и се присвоява вече коректен. 

Поздрави!

1
Nikola_Andreev avatar Nikola_Andreev 671 Точки

Вероятно първо ги умножава и превъртат понеже са инт, а после ги записва в лонг но те вече са препълнили инта. В долния случай още по време на умножението вижда че едното е лонг и не го препълва.

2
Slavi007 avatar Slavi007 0 Точки

В първия случай типът е int и той не може да побере такова число и превърта. Затова има long, за да се вмести в него.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.