Delphi, Asm, C, WinAPI, PHP, ..., FAQ |
Добро пожаловать, гость ( Вход | Регистрация )
Delphi, Asm, C, WinAPI, PHP, ..., FAQ |
-=CHE@TER=- |
Jan 5 2007, 00:35
Сообщение
#1
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Delphi programs in API.
На английском. Очень подробно всё описано, плюс есть исходные коды готовых юнитов. Например SmallUtil, в котором есть все частоиспользуемые подпрограммы, и который в размере меньше, чем SysUtils (автор так утверждает - я не проверял). |
-=CHE@TER=- |
Jan 15 2010, 19:26
Сообщение
#2
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Товарищи, объясните мне кто-нибудь такой феномен:
CODE Program bitstest; {$APPTYPE CONSOLE} Var X: Cardinal; Begin X:=123; X:=X ShR 32; // Должно быть 0... WriteLn(X); // Но остаётся 123 как и было!.. End. X ShR 32 (X >> 32) должно быть 0, т.к. X переменная 32-х разрядная. Но дело в том, что эта операция не работает! Если сделать X >> 31 - то всё ок, но 32 просто ничего не делает - X не изменяется! Сейчас даже на FASM программу написал - такой же результат. Это что за багофича такая?!.. Кстати, если на Си такое сделать, то результат не изменится, но будет предупреждение: warning: right shift count >= width of type Просто есть формула: X:=X ShR (32 - BITS); Которая при BITS = 0, должна давать 0, но из-за этого косяка получается фигня... Кто-нибудь может объяснить почему так? Я ещё понимаю, когда сдвиг больше размера типа, но когда равно - должен же 0 быть?.. Добавлено: Ну, трындец просто (взято отсюда): QUOTE most popular CPUs have only 5 bit shift counts Офигеть!!!И ещё (примерно оттуда же): QUOTE shift count from 0 up to the number of bits in the register-1 Слов нет - одни эмоции. |
Упрощённая версия | Сейчас: 10th November 2024 - 18:31 |