Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342

Не требуется приведение типов при умножении типов Byte

22.09.2014, 22:55. Показов 1973. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Читал тут книгу(Г. Шилдт, "Полный справочник по C#"), и нашел такое (ст. 77)

Поскольку при умножении, например, 2 чисел типа byte, результат будет приведен к int, то надо вручну привести тип, и там такой пример
C#
1
2
byte b = 10;
b = (byte) (b*b);//ручное приведение типа от результата int к byte
А тепер вопрос
C#
1
2
byte b = 10;
b *= b;//никакого приведения типа не требуеться, компилиться и без него, и результат акой же, как и у (byte) (b*b), т.е. 100
Почему так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2014, 22:55
Ответы с готовыми решениями:

Приведение типов Byte в Int
Перевожу число в byte получается 00 00 80 3f - 1 как перевести из byte обратно в инт? float one = Convert.ToByte(textBox1.Text); ...

Приведение типов при десериализации класса
Помогите пожалуйста разобраться в стопорной проблеме! Я использую BinaryFormatter для сериализации класса MySerialClass (класс...

Приведение типов
Есть 2 класса, экземпляр одного из них передаётся в другой по ссылке: public B(Object a) { _a = a; } ...

8
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
22.09.2014, 22:57
Цитата Сообщение от zewer Посмотреть сообщение
C#
1
2
byte b = 10;
b *= b;//никакого приведения типа не требуеться, компилиться и без него, и результат акой же, как и у (byte) (b*b), т.е. 100
Почему так?
Ибо тип ты обьявил ещё в первой строке и снова его обьявлять не надо.
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
22.09.2014, 22:59  [ТС]
Цитата Сообщение от triadec_96 Посмотреть сообщение
Ибо тип ты обьявил ещё в первой строке и снова его обьявлять не надо.
прокомпильте у себя
C#
1
2
byte b = 10;
b = b*b;
отпишите как компилиться
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
22.09.2014, 23:06
Цитата Сообщение от zewer Посмотреть сообщение
b = b*b;
- неправильно
Во мой код:
C#
1
2
3
4
 byte b = 10;
            b *= b;
            Console.WriteLine (b);
            Console.ReadKey();
Вывело 100.
Всё норм. Синтаксис такой. Привыкай.
0
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
22.09.2014, 23:08  [ТС]

прочитайте еще раз первое сообщение
почему не требуеться явное приведение типов
0
 Аватар для triadec_96
12 / 12 / 8
Регистрация: 27.12.2012
Сообщений: 448
22.09.2014, 23:36
Цитата Сообщение от zewer Посмотреть сообщение
почему не требуеться явное приведение типов
Цитата Сообщение от triadec_96 Посмотреть сообщение
Синтаксис такой. Привыкай.
Это как-бы аксиома
0
 Аватар для Lexeq
1151 / 743 / 483
Регистрация: 21.01.2014
Сообщений: 1,903
22.09.2014, 23:48
В скомпилированном виде и то и другое будет выглядеть одинаково, так:
C#
1
2
byte b = 10;
b *= b;
Так же посмотрим на пру примеров:
C#
1
2
3
4
5
6
//код в студии:
byte b = 10;
byte c = (byte)(b * b);
//код после компиляции:
byte b = 10;
byte c = b * b;
Как видим, никакого приведения нет.
C#
1
2
3
4
5
6
//код в студии:
int b = 10;
byte c = (byte)(b * b);
//код после компиляции:
int b = 10;
byte c = (byte)(b * b);
Приведение есть. То есть byte = byte * byte, вполне допустимо, но так как во время компиляции (byte * byte) расценивается как int, то приведение необходимо. А в случае byte *= byte, компилятор int'a не усматривает и приведение не нужно.

Не по теме:

P.S. На правильности умозаключение не настаиваю.

1
Заблокирован
23.09.2014, 00:07
zewer, компилятор при использовании *= сам проводит преобразование.

C#
1
2
3
4
5
                    Console.WriteLine("0");
                    b *= b;
                    Console.WriteLine("1");
                    b = (byte)(b * b);
                    Console.WriteLine(".");
Если открыть в Ildasm:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 IL_0006:  ldstr      "0"
    IL_000b:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_0010:  nop
    IL_0011:  ldloc.0
    IL_0012:  ldloc.0
    IL_0013:  mul
    IL_0014:  conv.u1
    IL_0015:  stloc.0
    IL_0016:  ldstr      "1"
    IL_001b:  call       void [mscorlib]System.Console::WriteLine(string)
    IL_0020:  nop
    IL_0021:  ldloc.0
    IL_0022:  ldloc.0
    IL_0023:  mul
    IL_0024:  conv.u1
    IL_0025:  stloc.0
    IL_0026:  ldstr      "."
    IL_002b:  call       void [mscorlib]System.Console::WriteLine(string)
1
 Аватар для zewer
2356 / 1774 / 212
Регистрация: 07.01.2011
Сообщений: 10,342
23.09.2014, 13:25  [ТС]
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2014, 13:25
Помогаю со студенческими работами здесь

Приведение типов
Здравствуйте, дамы и господа, наверное я совсем чего-то не понимаю, но вот такой элементарный код выводит: "Не удалось привести...

приведение типов
подскажите, что надо почитать, чтобы понять как происходит на пример усечение при приведении типов - хочу понять почему к примеру при таком...

Приведение типов
Доброго времени суток! Прошу помощи с решением данного задания. Я пытался решить, но возникли проблемы с приведением типов, строка 16. ...

Приведение типов в C#
Как считанную из реестра информацию о шрифте присвоить объекту textBox1.Font? Приведение типов такого вида (Font)o (o- объект типа Object)...

Приведение типов
Есть две переменные, первая типа Object, вторая неизвестно какого типа. Необходимо привести переменную первого типа к типу второй. Пишу...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru