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

Вниз

это глюк в Дельфи, или в моей голове?   Найти похожие ветки 

 
Ketmar   (2002-08-21 10:02) [0]

нижеприведенный код должен вывести два одинаковых числа. однако в Дельфи5 это совсем не так. господа, проверьте, плиз, код на шестой - там тот же глюк?

зыж однако переписывать FixedMath library на асме все равно придется, из-за этого глюка там нельзя использовать сдвиги, черт возьми! :-((


// tested with Delphi5
program DelBUG;
var
R: Integer;
begin
R := -2162688;
R := R shr 8;
WriteLn(R);
R := -2162688 shr 8;
WriteLn(R);
end.


Satanas Nobiscum! 21-Aug-XXXVII A.S.


 
AFROLOV   (2002-08-21 10:09) [1]

Скорее всего здесь проблема с типами. Возможно, компилятор считает, что число -2162688 имеет тип отличный от Integer.
Соответственно побитовая сдвижка дает совершенно другой результат.


 
Alx2   (2002-08-21 10:21) [2]

Старший байт в первом случае $00 во втором - $FF.


 
Alx2   (2002-08-21 10:23) [3]

Исправляется так:
R := Cardinal(-2162688) shr 8;


 
Ketmar   (2002-08-21 10:42) [4]

господа, вы не поняли :-) Мне как раз надо, чтобы сдвиг Integer работал как надо (т.е. был арифметическим, а не логическим). в чем причина глюка, Я знаю. Мне инетерсно, пофиксили его в следующих версиях (5.01, 5.5, 6) или нет.

Satanas Nobiscum! 21-Aug-XXXVII A.S.


 
MyVeryShortLogin   (2002-08-21 10:52) [5]

Delphi 6:
16768768
-8448


 
Ketmar   (2002-08-21 11:04) [6]

ясно. глюк на месте... :-(

Satanas Nobiscum! 21-Aug-XXXVII A.S.


 
Anatoly Podgoretsky   (2002-08-21 11:11) [7]

Это не глюк, а нормальное поведение, сдвиг побитовый, беззнаковый (ассемблерная команда SHR), во втором случае сдвиг делается компилятором.
Обойти можешь если напишишь ассемблерную вставку или заменишь сдвиг делением на 256, результат проверен при R div 256 -> -8448


 
Ketmar   (2002-08-21 11:20) [8]

Анатолий, я знаю про деление :-).
а поведение НЕ НОРМАЛЬНОЕ. переменная-то - Integer, то бишь ЗНАКОВАЯ. следовательно, компилятор должен делать АРИФМЕТИЧЕСКИЙ, а не ЛОГИЧЕСКИЙ сдвиг (sar, а не shr). так что все ж глюк...

Satanas Nobiscum! 21-Aug-XXXVII A.S.


 
Anatoly Podgoretsky   (2002-08-21 11:32) [9]

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


 
Ketmar   (2002-08-21 11:54) [10]

мда. действительно, shr - сдвиг логический. тогда компилер должен и в первом случае делать логический. все равно неувязка :-)
а деление не хочу, потому что оно медленее. для Меня FPS критичен. хотя, в принципе, все равно на асме перепишу, для скорости. кстати, сейчас у Меня и сделано делением...

Satanas Nobiscum! 21-Aug-XXXVII A.S.


 
Ihor Osov'yak   (2002-08-21 12:13) [11]



> а деление не хочу, потому что оно медленее



Компилятор - он умный чукча, однака: если видит деление на констану, равную степени двойки - заменяет сдвигом - Ctrl+Shift+C пресанни в рантайми, сам увидишь ....


 
Ketmar   (2002-08-21 12:21) [12]

а не должен бы. ибо shr и idiv для отрицательных чисел, не делящихся нацело дают разные результаты...

Satanas Nobiscum! 21-Aug-XXXVII A.S.


 
kull   (2002-08-21 12:23) [13]


> Satanas Nobiscum! 21-Aug-XXXVII A.S.

А по русски? Шо це таке?



 
Ihor Osov'yak   (2002-08-21 12:38) [14]

2 Ketmar

i:=-5;
mov eax,$fffffffb
i:= i := i div 2;
sar eax,1
jns XXXX
adc eax,$00


Говорю же, умный чукча ...



 
Ihor Osov'yak   (2002-08-21 12:38) [15]

в догонку CTRL_Alt+C - а не шифт


 
DiamondShark   (2002-08-21 14:47) [16]

Удалено модератором


 
kull   (2002-08-21 14:59) [17]

Удалено модератором


 
limon   (2002-08-21 15:10) [18]

Удалено модератором


 
Ketmar   (2002-08-21 16:57) [19]

Удалено модератором


 
Игорь Шевченко   (2002-08-21 17:01) [20]

Ketmar © (21.08.02 16:57)

Глупый вопрос: а что значит Satanas Nobiscum! 21-Aug-XXXVII A.S. ?


 
Ketmar   (2002-08-21 17:05) [21]

2Игорь Шевченко:
этот вопрос возникает с завидной регулярностью :-)
перевожу: "Сатана с нами!, 21 авг. 37г. Anno Satanas"
;-)

Satanas Nobiscum! 21-Aug-XXXVII A.S.


 
Игорь Шевченко   (2002-08-21 17:09) [22]

Ketmar © (21.08.02 17:05)

Спасибо за разъяснение...

:-) С вами, так с вами :-)))



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

Форум: "Потрепаться";
Текущий архив: 2002.09.16;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
14-50938
kalenih
2002-08-21 10:47
2002.09.16
Сибирь


1-50841
maxim2
2002-09-04 06:06
2002.09.16
Текст из RichEdit вообще можно сохранить в формате ТХТ а не в RT


3-50644
savva
2002-08-23 14:26
2002.09.16
Блокировка файла не возможна - что это и с чем едят:))


1-50811
mvg_first
2002-09-03 16:19
2002.09.16
Помогите отучить TVideoGrabber от наг-скрина!


1-50847
FireStream
2002-09-04 15:10
2002.09.16
Странные глюки с размерами





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский