![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Преобразование типов
Галинка © (2008-07-04 10:06:00)Как происходит сия славная операция? Т.е. понятно, что можно просто написать типа char t; int tt = (int)t; Но как происходит само преобразование?
Jeer (2008-07-04 14:58:00) [1]А с котлетами лучше получилось бы.
Возможно.
han_malign (2008-07-04 14:50:00) [2]tt = (unsigned char)t;
movzx ...
короче, только расширение знакового до знакового дополняется флагом знака, в остальных случая - нулями. Обрезание и прямое присвоение - напрямую(следует из представления отрицательных чисел) - потеря знака при переполнении - на совести программиста, о чем честно предупреждает компилятор...
UINT(-1) == 0xFFFFFFFF
INT(0xFFFFFFFF) == -1
(int)(0x00000002 - 0xFFFFFFFF) == +3
(int)(2147483647+1) == -2147483648
han_malign (2008-07-04 14:09:00) [3]char t, _t;
int tt; unsigned int utt;
.386
_t = t;
mov al, t
mov _t, al
tt = t;
movsx eax, t
mov tt, eax
utt = t;
movzx eax, t
mov utt, eax
Anatoly Podgoretsky (2008-07-04 13:57:00) [4]> Плохиш (04.07.2008 13:21:23) [23]
Так еще и по синтаксису не скажешь, где преобразование, а где приведение типа, и даже документации доверять нельзя, поскольку предмет для изменения.
В Дельфи это рассписано, но не уверен, что полностью и что это актуально.
Вообще задача странная.
Плохиш (2008-07-04 13:21:00) [5]
> Галинка (04.07.08 12:29) [19]
> коллектив дал мне задачу.
Неужели задача состоит в том, что бы разобраться в приведении типов. Тогда они над тобой просто издеваются.
Для CPU вообще типов нету, он двоизными данными оперирует. А приведение типов - это придумано в ЯВУ. И в описании каждого ЯВУ на первых страницах расписывается возможное приведение типов. Для java, в частности, http://www.teialehrbuch.de/Kostenlose-Kurse/JAVA/6561-Typumwandlung.html
Anatoly Podgoretsky (2008-07-04 12:52:00) [6]> Галинка (04.07.2008 12:29:19) [19]
Да какой общий рецепт, когда ты скатилась до двух языков :-)
Галинка (2008-07-04 12:43:00) [7]Ой... Извините много раз.... Конечно Анатолия. Надо заканчивать мозги на трех языках ломать (((
brother (2008-07-04 12:32:00) [8]> Аналия
опечатка О_о
Галинка (2008-07-04 12:29:00) [9]Плохиш © (04.07.08 12:21) [18]
коллектив дал мне задачу. А я ее мучаю. Или себя. (( Половина коллектива хорошо знает С но не знает явы. Другая половина - зеркальное отражение первой. Я пытаю каждую сторону по чуть-чуть. Когда не понимаю что-то на англ/нем пытаюсь спрашивать здесь. Но если по словам Аналия общего рецепта нет. Пошла в гугл. Буду после обеда )))
ПыСы: "Ушел в себя. Вернусь после обеда." Надпись на двери кабинета )))
Плохиш (2008-07-04 12:21:00) [10]
> Галинка (04.07.08 12:14) [14]
> Плохиш © (04.07.08 12:10) [13]
>
> ты ко мне во множественном числе?
Странно, мне казалось, что ты в коллективе работаешь...
Anatoly Podgoretsky (2008-07-04 12:18:00) [11]> Галинка (04.07.2008 12:14:14) [14]
Общий принцип такой
Исходный тип | Новый тип | Признак возможности | чем или как преобразовывать
Anatoly Podgoretsky (2008-07-04 12:17:00) [12]> Галинка (04.07.2008 12:14:14) [14]
Он вообще то не к тебе обращается, а к стране.
Anatoly Podgoretsky (2008-07-04 12:16:00) [13]> Галинка (04.07.2008 12:02:12) [12]
Хочешь доведу?
Не в каждом языке есть преобразование/приведение. Да даже и типов нет.
Галинка (2008-07-04 12:14:00) [14]Плохиш © (04.07.08 12:10) [13]
ты ко мне во множественном числе? Потому как с уважением должно бы быть с большой буквы (про правила правописания в инете частично в курсе, но привыкнуть не могу)
Взорвать ничего не пытаюсь. Просто надо из нативной длл на приплюснутом си вытаскивать в массовом порядке строки через JNI. Но сейчас Игорь опять скажет, что я не туда попала. Потому хотелось бы понять общий принцип преобразования типов.
Плохиш (2008-07-04 12:10:00) [15]
> Галинка (04.07.08 12:02) [12]
> Мое сердце разбито. И я тогда уже на полпути в желтый дом
> наверное.
Интересно, что вы там на этот раз взорвать пытаетесь? :-)
Галинка (2008-07-04 12:02:00) [16]
> Anatoly Podgoretsky © (04.07.08 11:41) [11]
>
> > Галинка (04.07.2008 11:34:10) [10]
>
> Общего принципа нет.
>
Мое сердце разбито. И я тогда уже на полпути в желтый дом наверное.
Anatoly Podgoretsky (2008-07-04 11:41:00) [17]> Галинка (04.07.2008 11:34:10) [10]
Общего принципа нет.
Галинка (2008-07-04 11:34:00) [18]Игорь Шевченко © (04.07.08 11:16) [9]
проcто понять. Не применительно к какому-то языку. А просто общий принцип.
Еще раз: передаем в функцию, например, char. А в функции его надо использовать где-то как символ, где-то как беззнаковый символ, где-то как целое. Для этого просто используем операции приведения типов. А теперь вопрос, как компилятор (или что-то еще) понимает, что 0х001F надо расширить до 0x0000001F. Маски и логическое &?
Игорь Шевченко (2008-07-04 11:16:00) [19]Че те надо-то ?
Evgeny V (2008-07-04 11:02:00) [20]Пр
> авильный-Вася (04.07.08 10:52) [7]
Можно. Ответ дан для привденного варианта. Unsigned при преобразовании в разных случаях может изменить или не изменить правила расширения знака. Надо просто знать как происходит преобразование в том или ином случае.
Причем в разных языках это может быть по разному, где-то просто не даст явно привести тип char в тип int, а где-то нет unsigned...