Форум программистов, компьютерный форум CyberForum.ru

Модульное деление на степень двойки - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
04.12.2012, 14:30     Модульное деление на степень двойки #1
Раньше я всегда использовал примерной такой подход :
C++
1
2
3
4
5
6
int mod = 8;
int a = 90412488;
char b = 113;
int modA, modB;
modA = a & int(mod-1);
modB = b & char(mod-1);
Понятное дело, что можно написать функцию, которая определала бы тип и была бы красивой оберткой для такого подхода, но мне хватало. Сейчас встал опять вопрос с модульным делением на 2^x. Я бы использовал этот подход, но кто-то как-то сказал мне, что такое решение в каких-то случаях выдает не верный результат или ошибки. Я напрочь забыл, кто это сказал :/
Вопрос : в чем плох такой подход и как правильно?
Скорее всего, компиляторы сами производят подобную оптимизацию, но всё же.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 14:30     Модульное деление на степень двойки
Посмотрите здесь:

C++ Найти степень двойки
C++ Степень двойки
Максимальная степень двойки C++
степень двойки C++
Степень двойки в степени десятки C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sanyur
11 / 11 / 0
Регистрация: 19.03.2010
Сообщений: 101
04.12.2012, 17:18     Модульное деление на степень двойки #21
Кстати, в голове всплыло ограничение что число не должно быть отрицательное.
проверьте
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
04.12.2012, 17:18  [ТС]     Модульное деление на степень двойки #22
taras atavin, то ли троль, то ли перепил и залез на форум.. Что тебе в названии темы не понятно? В нём сразу описано и задание, и то, что делить нужно лишь на степень двойки и никаких проверок, соответственно, не нужно производить. Даже если и не понял этого, я уже 3 раза ранее описал задание специально для тебя.

WhiteP, всё-таки есть оптимизация значит.. Сможете восстановить из этого ассемблерного листинга, что же происходит при делении на 2^x и как это написать на высоком уровне? Я в ассемблере соображаю совсем туго :/

Sanyur, насколько я помню, деление с остатком идет только на целые не отрицательные числа, но могу и ошибаться.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 17:23     Модульное деление на степень двойки #23
Цитата Сообщение от nexen Посмотреть сообщение
taras atavin, то ли троль, то ли перепил и залез на форум
Я вообще не пью.
Цитата Сообщение от nexen Посмотреть сообщение
Что тебе в названии темы не понятно?
А может ты хочешь разделить 90412488 на 8 и от частного взять остаток от деления на 256?

Добавлено через 1 минуту
Цитата Сообщение от Sanyur Посмотреть сообщение
Кстати, в голове всплыло ограничение что число не должно быть отрицательное.
проверьте
Ну вообще да. Отрицательные хранятся в дополнительном коде, где полно нолей на месте единиц.
WhiteP
605 / 203 / 23
Регистрация: 20.11.2012
Сообщений: 419
04.12.2012, 17:25     Модульное деление на степень двойки #24
nexen,
C++
1
2
3
4
5
modA = a & (mod-1)
if(a < 0)
{
     modA=((modA--)|(0-mod))++;
}
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
04.12.2012, 17:43  [ТС]     Модульное деление на степень двойки #25
WhiteP, ах вот в чем была загвоздка. Как и сказал Sanyur, а я его не так понял. Спасибо. Вопрос снят.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2012, 20:45     Модульное деление на степень двойки
Еще ссылки по теме:

Наибольшая целая степень двойки, не превосходящая заданного числа n C++
C++ Степень двойки для отражения размера памяти
C++ Возведение двойки в большую степень (длинное число)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2012, 20:45     Модульное деление на степень двойки #26
Цитата Сообщение от nexen Посмотреть сообщение
насколько я помню, деление с остатком идет только на целые не отрицательные числа, но могу и ошибаться.
Речь о делимом.
Yandex
Объявления
04.12.2012, 20:45     Модульное деление на степень двойки
Ответ Создать тему
Опции темы

Текущее время: 04:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru