Главная страница
    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.01 c
1-50765
kay
2002-09-04 23:03
2002.09.16
TTreeNode


3-50587
Soft
2002-08-24 15:55
2002.09.16
Передача параметров в SQL запросе.


3-50580
Dimkin
2002-08-23 17:29
2002.09.16
Вызов хранимой процедуры


3-50592
Kolya
2002-08-24 23:45
2002.09.16
Autoincrement


1-50730
masik
2002-09-05 15:48
2002.09.16
Help with ADOBE





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