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

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

04.12.2012, 14:30. Показов 8800. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.12.2012, 14:30
Ответы с готовыми решениями:

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

степень двойки
Вводится число. Напечатать YES, если оно является степенью двойки, NO - иначе. int a,b=1; cin>>a; for(;;) { b=b*2;...

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

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

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

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

Добавлено через 1 минуту
Цитата Сообщение от Sanyur Посмотреть сообщение
Кстати, в голове всплыло ограничение что число не должно быть отрицательное.
проверьте
Ну вообще да. Отрицательные хранятся в дополнительном коде, где полно нолей на месте единиц.
0
844 / 353 / 68
Регистрация: 20.11.2012
Сообщений: 852
04.12.2012, 17:25
nexen,
C++
1
2
3
4
5
modA = a & (mod-1)
if(a < 0)
{
     modA=((modA--)|(0-mod))++;
}
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
04.12.2012, 17:43  [ТС]
WhiteP, ах вот в чем была загвоздка. Как и сказал Sanyur, а я его не так понял. Спасибо. Вопрос снят.
0
 Аватар для taras atavin
4226 / 1799 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
04.12.2012, 20:45
Цитата Сообщение от nexen Посмотреть сообщение
насколько я помню, деление с остатком идет только на целые не отрицательные числа, но могу и ошибаться.
Речь о делимом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.12.2012, 20:45

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru