ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
439332 Топик полностью
Bill (07.09.2013 12:38 - 12:48, просмотров: 74) ответил Юра на Почему? На некоторых компиляторах для знаковых величин старший бит распространяется при сдвиге вправо.
На эту тему разговор уже был. Правда, на другом форуме. Все дело в том, что всякая замена должна быть эквивалентной тому, что именно она заменяет. Например, если число -5 разделить на 2, то частное и остаток будут равны -2 и -1 соответственно. Если заменить деление сдвигом, то результат будет равен -3. Другой пример, попробуйте взять число -1 и посмотрите чему будет равен результат. -1 / 2 = 0 (числа целые). А что будет если -1 сдвинуть вправо 1 раз? Именно поэтому компиляторы не делают замену деления на сдвиги. Правда, GCC такую замену все же делает, но там используется специальный алгоритм. PS: Кстати, результаты вычислений -4/2 и -4>>1 будут совершенно эквивалентны.