Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];

Вниз

Преобразование типов   Найти похожие ветки 

 
Галинка   (2008-07-04 10:06) [0]

Как происходит сия славная операция? Т.е. понятно, что можно просто написать типа char t; int tt = (int)t;  Но как происходит само преобразование?


 
Palladin ©   (2008-07-04 10:21) [1]

смотре где приводится...
смотря что к чему приводится...

например в delphi в простейшем случае компилятор воспринимает данные в некотором участке памяти как приводимый тип данных, в сложнейшем случае приводимость типов отрабатывается во время исполнения на уровне rtl, то бишь происходит попытка из переменной-источника получить данные типа переменной-назначения, это касается variant"ов, интерфейсов и, может, еще чего нибудь

ну и в delphi, кстати, integer к char ты не приведешь, одно из условий приведения простых типов - совпадение размеров


 
Palladin ©   (2008-07-04 10:23) [2]


> ну и в delphi, кстати, integer к char ты не приведешь,

просшу просчения вру безбожно... размеры касаются записей...


 
MsGuns ©   (2008-07-04 10:27) [3]

Сия "операция" никак не выполняется потому как нету этой самой операции. Приведение типа лишь указывает компиллятору "схему" для вычислений смещений адресов относительно "базы". Т.е. на "выходе" как бы ничего нет, кроме корректно вычисленных смещений в адресах


 
MsGuns ©   (2008-07-04 10:28) [4]

Вообще-то я немного соврал - кое-что конечно появляется, например загрузки в регистры или стэки


 
Галинка   (2008-07-04 10:37) [5]

MsGuns ©   (04.07.08 10:27) [3]

вот с этого места подробней. Т.е. вот например тот же пример с символом и целым. Т.е. строго говоря у нас два байта и знак не учитывается. Но мы говорим, что эти данные надо рассматривать как четыре байта с учетом знака. Вот и интересно как это происходит.


 
Evgeny V ©   (2008-07-04 10:41) [6]


> Галинка   (04.07.08 10:37) [5]

Для языка си (пример же ты на нем вроде дала) тип char преобразуется в тип int c расширением знака. То есть, если сhar был отрицательный, то и int будет отрицательный.


 
Правильный-Вася   (2008-07-04 10:52) [7]


> Evgeny V ©   (04.07.08 10:41) [6]

unsigned и signed явно можно задать


 
Evgeny V ©   (2008-07-04 11:02) [8]

Пр
> авильный-Вася   (04.07.08 10:52) [7]

Можно. Ответ дан для привденного варианта. Unsigned при преобразовании в разных случаях может изменить или не изменить правила расширения знака. Надо просто знать как происходит преобразование в том или ином случае.
Причем в разных языках это может быть по разному, где-то просто не даст явно привести тип char в тип int, а где-то нет unsigned...


 
Игорь Шевченко ©   (2008-07-04 11:16) [9]

Че те надо-то ?


 
Галинка   (2008-07-04 11:34) [10]

Игорь Шевченко ©   (04.07.08 11:16) [9]

проcто понять. Не применительно к какому-то языку. А просто общий принцип.

Еще раз: передаем в функцию, например, char. А в функции его надо использовать где-то как символ, где-то как беззнаковый символ, где-то как целое. Для этого просто используем операции приведения типов. А теперь вопрос, как компилятор (или что-то еще) понимает, что 0х001F надо расширить до 0x0000001F. Маски и логическое &?


 
Anatoly Podgoretsky ©   (2008-07-04 11:41) [11]

> Галинка  (04.07.2008 11:34:10)  [10]

Общего принципа нет.


 
Галинка   (2008-07-04 12:02) [12]


> Anatoly Podgoretsky ©   (04.07.08 11:41) [11]
>
> > Галинка  (04.07.2008 11:34:10)  [10]
>
> Общего принципа нет.
>


Мое сердце разбито. И я тогда уже на полпути в желтый дом наверное.


 
Плохиш ©   (2008-07-04 12:10) [13]


> Галинка   (04.07.08 12:02) [12]
> Мое сердце разбито. И я тогда уже на полпути в желтый дом
> наверное.

Интересно, что вы там на этот раз взорвать пытаетесь? :-)


 
Галинка   (2008-07-04 12:14) [14]

Плохиш ©   (04.07.08 12:10) [13]

ты ко мне во множественном числе? Потому как с уважением должно бы быть с большой буквы (про правила правописания в инете частично в курсе, но привыкнуть не могу)

Взорвать ничего не пытаюсь. Просто надо из нативной длл на приплюснутом си вытаскивать в массовом порядке строки через JNI. Но сейчас Игорь опять скажет, что я не туда попала. Потому хотелось бы понять общий принцип преобразования типов.


 
Anatoly Podgoretsky ©   (2008-07-04 12:16) [15]

> Галинка  (04.07.2008 12:02:12)  [12]

Хочешь доведу?
Не в каждом языке есть преобразование/приведение. Да даже и типов нет.


 
Anatoly Podgoretsky ©   (2008-07-04 12:17) [16]

> Галинка  (04.07.2008 12:14:14)  [14]

Он вообще то не к тебе обращается, а к стране.


 
Anatoly Podgoretsky ©   (2008-07-04 12:18) [17]

> Галинка  (04.07.2008 12:14:14)  [14]

Общий принцип такой

Исходный тип | Новый тип | Признак возможности | чем или как преобразовывать


 
Плохиш ©   (2008-07-04 12:21) [18]


> Галинка   (04.07.08 12:14) [14]
> Плохиш ©   (04.07.08 12:10) [13]
>
> ты ко мне во множественном числе?

Странно, мне казалось, что ты в коллективе работаешь...


 
Галинка   (2008-07-04 12:29) [19]

Плохиш ©   (04.07.08 12:21) [18]

коллектив дал мне задачу. А я ее мучаю. Или себя. (( Половина коллектива хорошо знает С но не знает явы. Другая половина - зеркальное отражение первой. Я пытаю каждую сторону по чуть-чуть. Когда не понимаю что-то на англ/нем пытаюсь спрашивать здесь. Но если по словам Аналия общего рецепта нет. Пошла в гугл. Буду после обеда )))

ПыСы: "Ушел в себя. Вернусь после обеда." Надпись на двери кабинета )))


 
brother ©   (2008-07-04 12:32) [20]

> Аналия

опечатка О_о


 
Галинка   (2008-07-04 12:43) [21]

Ой... Извините много раз.... Конечно Анатолия. Надо заканчивать мозги на трех языках ломать (((


 
Anatoly Podgoretsky ©   (2008-07-04 12:52) [22]

> Галинка  (04.07.2008 12:29:19)  [19]

Да какой общий рецепт, когда ты скатилась до двух языков :-)


 
Плохиш ©   (2008-07-04 13:21) [23]


> Галинка   (04.07.08 12:29) [19]
> коллектив дал мне задачу.

Неужели задача состоит в том, что бы разобраться в приведении типов. Тогда они над тобой просто издеваются.
Для CPU вообще типов нету, он двоизными данными оперирует. А приведение типов - это придумано в ЯВУ. И в описании каждого ЯВУ на первых страницах расписывается возможное приведение типов. Для java, в частности, http://www.teialehrbuch.de/Kostenlose-Kurse/JAVA/6561-Typumwandlung.html


 
Anatoly Podgoretsky ©   (2008-07-04 13:57) [24]

> Плохиш  (04.07.2008 13:21:23)  [23]

Так еще и по синтаксису не скажешь, где преобразование, а где приведение типа, и даже документации доверять нельзя, поскольку предмет для изменения.
В Дельфи это рассписано, но не уверен, что полностью и что это актуально.
Вообще задача странная.


 
han_malign ©   (2008-07-04 14:09) [25]

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


 
han_malign ©   (2008-07-04 14:50) [26]

tt = (unsigned char)t;
movzx ...

короче, только расширение знакового до знакового дополняется флагом знака, в остальных случая - нулями. Обрезание и прямое присвоение - напрямую(следует из представления отрицательных чисел) - потеря знака при переполнении - на совести программиста, о чем честно предупреждает компилятор...
UINT(-1) == 0xFFFFFFFF
INT(0xFFFFFFFF) == -1
(int)(0x00000002 - 0xFFFFFFFF) == +3
(int)(2147483647+1) == -2147483648


 
Jeer ©   (2008-07-04 14:58) [27]

А с котлетами лучше получилось бы.
Возможно.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.012 c
15-1213783704
ciborg
2008-06-18 14:08
2008.08.03
Как работают мьютексы


2-1215055645
prodex
2008-07-03 07:27
2008.08.03
Объясните разницу..


3-1203655549
Ganda
2008-02-22 07:45
2008.08.03
Туплю


6-1191474026
Rav
2007-10-04 09:00
2008.08.03
Какой компонент использовать для обмена данными в D7?


15-1213651482
k2_
2008-06-17 01:24
2008.08.03
Симпатишный дизайн, полюбуйтесь.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский