4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
|
|
1 | |
Приведение типов в выражениях08.10.2013, 19:52. Показов 1340. Ответов 17
Метки нет Все метки)
(
Читаю сабжевую главу Шилдта, где поясняется как именно ведет себя компилятор (или правильней сказать C#?), когда в выражения (+,-,*,\ и т.д) встречаются переменные разных типов. например а+b, где a - uint, b - какой-нибудь др., тип , далее 2й аргумент приводится к 1му (в зависимости от правил языка). Все вроде понятно, НО! Возникает вопрос:
нужно ли зазубривать эти правила? (знать, что если 1я переменная принадлежит такому типу, а 2я такому, то...) насколько часто их приходится использовать в программистской практике? нельзя ли просто обходится в выражениях переменными одного типа, где это возможно? Надеюсь, не сумбурно получилось) Спасибо заранее..
0
|
|
08.10.2013, 19:52 | |
Ответы с готовыми решениями:
17
Не требуется приведение типов при умножении типов Byte Приведение типов Приведение типов Приведение типов |
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
08.10.2013, 20:15 | 2 |
Зазубривать не надо — со временем будет восприниматься интуитивно, особенно при частом использовании.
А в случае чего и компилятор намекнет. Единственное, что нужно запомнить на начальном этапе — это то, что результат арифметических операций над целыми числами — целое число: 1/2=0 1 / 2 + 3.0 = 3
1
|
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
|
|
08.10.2013, 20:18 [ТС] | 3 |
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
08.10.2013, 20:24 | 5 |
Предвещаю следующий вопрос: что такое "более общий тип" и как определяется его "боляя общность"?
![]()
0
|
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
|
|
08.10.2013, 20:28 [ТС] | 7 |
Не, ну господа, я же не совсем ку-ку
![]() Мне голову запудрили всякие правила-исключения, например: если один аргумент uint, а второй short,sbyte,int то рез-т будет long ... а если второй не short,sbyte,int, то будет uint. <----Вот такого рода мозгодробилки ![]()
0
|
Master of Orion
![]() |
|
08.10.2013, 20:35 | 8 |
sergIKO, ну а вы подумайте, какой должен быть тип, который гарантированно вместит в себя все возможные значения при такой сумме. Возьмем два крайних случая
![]() Вот вам и ответ, почему long
1
|
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
|
|
08.10.2013, 20:43 [ТС] | 9 |
Спасибо, вроде понял. Но боюсь, если я буду решать подобные задачи каждый раз дабы найти истину (не ту, что true
![]()
0
|
Нарушитель
|
|
08.10.2013, 23:57 | 10 |
С Шилдтом особо не увлекайся. Он лишь дает тебе лопату, которой ты сможешь быстрее разгрести Рихтера. Про интерфейсы, индексацию объектов, абстрактные классы он оч непонятно написал, я только у Рихтера и Троелсена начинаю понимать что это на самом деле и как можно применить в жизни(НО без прочтения Шилдта я Рихтера вообще читать не мог, понимал только отдельные фразы). Про обобщения вообще не врубился, хотя перечитываю третий раз уже ((мож это я туп конечно, я не отрицают и такого исхода). Ничего прохого про него сказать не хочу, им разжеванно достаточно, но от некоторых вещей самооценка резко падает +)
Поэтому просто все что он пишет фиксирую у себя, без зубрежки, понимая что все его объяснения будут в других книгах ещё не раз опровергнуты.
0
|
Master of Orion
![]() |
|
09.10.2013, 00:11 | 11 |
petrolium, я рихтера так и не осилил. У него очень много воды и проработки не того, что надо. Это из разряда четырех томов Кнута - называется настолькой книгой программиста, а на деле никто не читал, потому что дохрена всего и не очень по делу. По крайней мере мне попадались книжки с большей плотностью полезной информации на страницу.
0
|
![]() 17437 / 12829 / 3361
Регистрация: 17.09.2011
Сообщений: 21,107
|
|
09.10.2013, 01:14 | 12 |
Зря вы так на Кнута. В его "искусстве" как раз всё строго по делу и с минимумом воды (из воды там редкие вкрапления шуток. Довольно ехидных, надо заметить), но там больше уклон на математический анализ алгоритмов, нежели на программирование как таковое — достаточно глянуть на оглавление.
0
|
Заблокирован
|
|
09.10.2013, 09:59 | 13 |
Посмеялся. Запомни 1, неявно приводятся всегда базовые типы в сторону расширения, - там где не будет потеря информации, и явно в обратном направлении. 2, все что меньше int (byte,short +u) -на самом деле int. 3 По умолчанию создаются литералы int, double. Все остальные ответы можешь пропустить.
0
|
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
|
||||||
09.10.2013, 20:09 [ТС] | 14 | |||||
Так стоп, я уже запутался. На основании всего вышесказанного усвоил следующее правило:
Выражение всегда будет приводится к тому типу, который может вместить в себя результат выполнения операции без потери информации. Например, умножаем переменную типа byte = 200 на переменную типа int= 2 100 000 000 (специально выбрал близкое к максимальному значению). По идее результат должен иметь тип long, т.к. результат произведения двух переменных выйдет за пределы области значений для byte и int. Так? Но почему, в результате выполнения нижеприведенной программы получается какое-то отрицательно значение??? (-906795008)
0
|
369 / 341 / 108
Регистрация: 12.02.2013
Сообщений: 653
|
|
09.10.2013, 20:22 | 15 |
sergIKO, в данном случае оба операнда продвигаются к типу int, в результате чего переполнение...
0
|
4 / 4 / 1
Регистрация: 20.01.2010
Сообщений: 93
|
|
09.10.2013, 20:33 [ТС] | 17 |
0
|
Master of Orion
![]() |
|
09.10.2013, 21:43 | 18 |
sergIKO, если один операнд может быть без потери приведен к типу другого операнда, то результат будет этого типа. Если нет - тогда верно то, что было сказанно выше. В данном случае умножаются два int, в результате переполнения получаем отрицательное значение, Это отрицательное значение превращается в long и записывается куда нужно.
0
|
09.10.2013, 21:43 | |
09.10.2013, 21:43 | |
Помогаю со студенческими работами здесь
18
Приведение типов Приведение типов Приведение типов Приведение типов приведение типов Приведение типов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |