|
|
|
|
|
для: Trianon
(18.05.2007 в 15:15)
| | Логический сдвиг для микроконтроллеров - это всетаки не правило, он может отсутствовать :(
Ну главное ясна причина потери бита! :) | |
|
|
|
|
|
|
|
для: sim5
(18.05.2007 в 15:05)
| | и в микроконтроллерах и в микропроцессорах, как правило, есть не только команды циклического сдвига (ROL/ROR), но и обычного логического (SHL/SHR), а иногда и арифметического (SAR)
Флаг переноса в них входным операндом не является.
А в реализациях компиляторов для тех архитектур, где таких команд нет, перед ROL добавляют CLC (CLear Carry/borrow flag bit) | |
|
|
|
|
|
|
|
для: Trianon
(18.05.2007 в 14:42)
| | Ну значит будем считать, что авторы вышеперечисленного, посчитали ненужным этот бит :)
Я по крайней мере не знаю куда он исчезает.
Даже в микроконтроллерах - при простом циклическом сдвиге крайний бит будет перходить на место бита 0 или 7, в зависимости от направления сдвига. Если сдвиг производить командой учитывающей перенос (через флаг переноса), то это позволяет в 8-разрадных процессорах производить лог. сдвиги многобайтовых чисел.
Куда исчезает бит в РНР? | |
|
|
|
|
|
|
|
для: sim5
(18.05.2007 в 14:21)
| | Он в любом языке (где лексема << обозначает сдвиг) таким происходит .
В С, С++, Java, JS, C#(в конечном итоге)
Во всех этих языках он превращается в инструкцию shl (в терминах Intel)
В том числе (в конечном итоге) и в PHP | |
|
|
|
|
|
|
|
для: Trianon
(18.05.2007 в 13:45)
| | $b = $a <<4 // =160
Значит сдвиг в РНР происходит без учета переноса, в противном случае должно получится 168. | |
|
|
|
|
|
|
|
для: sim5
(18.05.2007 в 13:34)
| | Так и я говорю не о точности. Оперируя целыми, о точности уже не говорят. Просто на обычных четырех действиях арифметики движок php отказывается оперировать целыми. Я говорю именно об этом отказе.
А скорость несложно померять.... Но думаю, результат будет в пользу сдвигов отнюдь не из-за простоты схемной реализации, а просто потому, что не придется преобразовывать аргументы к вещественному типу. | |
|
|
|
|
|
|
|
для: Trianon
(18.05.2007 в 12:49)
| | Я хотел сказать не о точности (понятное дело что это не всегда оправдано), а о скорости выполнения операций деления и логического сдвига. Исходя из логики работы процессора, логический сдвиг, операция быстрее - данные в акумуляторе сдвигаются через флаговый регистр нужное число раз и все, операция деления это несколько сложнее процесс...
Отражается ли это на скорости выполнения этих операций в РНР, вот этого я не знаю :) | |
|
|
|
|
|
|
|
для: sim5
(18.05.2007 в 11:58)
| | >>зачем сдвигать что то и что это дает
>
>Не знаю как разнится в РНР, но бывает, что гораздо быстрее произвести логический сдвиг числа, чем делить его.
Именно в php разница разительная.
<?php
$a = 268435466 ;
echo "<br>a= $a";
$b = $a <<4;
$c = $a *16;
echo "<br>b= a<<4 = $b";
echo "<br>c= a*16 = $c";
$d = $b/64;
$f = $b>>6;
echo "<br>d= b/64 = $d ";
echo "<br>f= b>>6 = $f ";
?>
|
| |
|
|
|
|
|
|
|
для: bronenos
(18.05.2007 в 07:32)
| | >зачем сдвигать что то и что это дает
Не знаю как разнится в РНР, но бывает, что гораздо быстрее произвести логический сдвиг числа, чем делить его. | |
|
|
|
|
|
|
|
для: mefestofel
(18.05.2007 в 05:43)
| | зачем сдвигать что то и что это дает | |
|
|
|
|