Ushort целочислено делене
Здравейте,
Работя над задача 10 от глава 3 "Въведение в програмирането със C#":
- Напишете програма, която приема за вход четирицифрено число във формат abcd (например числото 2011) и след това извършва следните действия върху него:
- Пресмята сбора от цифрите на числото (за нашия пример 2+0+1+1 = 4).
- Разпечатва на конзолата цифрите в обратен ред: dcba (за нашия пример резултатът е 1102).
- Поставя последната цифра, на първо място: dabc (за нашия пример резултатът е 1201).
- Разменя мястото на втората и третата цифра: acbd (за нашия пример резултатът е 2101).
Като цяло задачата ми е ясня. Започнах да я пиша със следния код:
class FourDigitNumber
{
static void Main()
{
System.Console.WriteLine("Please, enter a four digit number: ");
ushort number = ushort.Parse(System.Console.ReadLine());
ushort ones = number%10;
}
}
Извежда ми следната грешка:
Cannot implicitly convert type 'int' to 'ushort'. An explicit conversion exists (are you missing a cast?)
Интересно защо се получава така. В случая не виждам никакво конвертиране. Извършвам целочислено деление на променлива от типа ushort. Като задам int навсякъде, всичко е ОК.
Благодаря предварително!
CLR (Common Language Runtime)-a си го разбира, но представянето на unsigned типовете е различно от signed, заради стандартизацията (Common Language Specification).
Възможните им стойности са по-големи от тези на signed. При signed първия бит, отляво надясно, държи стойността на знака( + - ), докато при unsigned този бит определя стойността.
short signed 16-bit (65,536 possible values, from -32,768 to 32,767) ushort unsigned 16-bit (65,536 possible values, from 0 to 65,535)Така стойност по-голяма от 32767 при unsigned 16bit не може да се конвертира до същия тип signed 16bit и затова се представя като по-голям тип 32bit, за да може да се вмести без загуба.
Както и обратното от signed не може да конвертираш директно до unsigned, защото няма как да се представи в случай, че е отрицателно.
Unsigned типовете са, така да кажем, изкуствено пресъздадени в C# и VB. Например в Java няма unsigned типове.
Не мога много добре да обяснявам, но се надявам да си схванал какво имам предвид.
Hristo_Penchev, сега виждам, че е станала някаква грешка в линка, който дадох по-горе. Редактирах го, но ще пусна линковете пак: Това е официалната тема за домашното: https://softuni.bg/forum/questions/details/228
А тук има повече решения: https://softuni.bg/forum/questions/details/181/ Има я решена и със стрингове - аз поне така я писах :}