Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
nexen
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
#1

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

04.12.2012, 14:30. Просмотров 2724. Ответов 25
Метки нет (Все метки)

Раньше я всегда использовал примерной такой подход :
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. Я бы использовал этот подход, но кто-то как-то сказал мне, что такое решение в каких-то случаях выдает не верный результат или ошибки. Я напрочь забыл, кто это сказал :/
Вопрос : в чем плох такой подход и как правильно?
Скорее всего, компиляторы сами производят подобную оптимизацию, но всё же.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2012, 14:30
Ответы с готовыми решениями:

Вычислить 10-ю степень двойки сложением, умножением и просто возведением в степень.
Написать код на С++ или С# или на Java Вычислить 10-ю степень двойки 1 -...

степень двойки
Вводится число. Напечатать YES, если оно является степенью двойки, NO - иначе....

Степень двойки
Изучаю программирование. Попытался решить известную задачу. Программа...

Точная степень двойки
Написал прогу. Как сделать, чтобы при вводе числа не являющейся точной степенью...

Максимальная степень двойки
"F(a, b) = x - 1, где x - максимальная степень двойки, на которую делится...

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

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

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

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

Точная степень двойки
Само задание: Дано натуральное число N. Выведите слово YES, если число N...

Найти степень двойки
Дано целое число N&gt;0, являющееся некоторой степенью числа 2:N=2 ^k. Найти целое...

Степень двойки и остаток от деления
Цель: Возведите 2 в 75 степень, выведите остаток от деления полученного числа...


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru