Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Преобразование типов


Страницы:   1 2

Галинка ©   (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...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо