Форум программистов, компьютерный форум, киберфорум
Наши страницы

Решето Ератосфена - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не могу разобраться. Мат логика http://www.cyberforum.ru/cpp-beginners/thread955875.html
Задание №1. Написать программу для реализации следующего алгоритма определения является ли данная строка символов пропозициональной формулой или нет: шаг 1. Проверка скобочного итога формулы. шаг...
C++ Написать функцию Procent Написать функцию Procent, которая возвращает процент от полученного в качестве аргумента числа. Очень прошу помочь, завтра последний день сдачи практики, а я никак не могу успеть. Ибо я буду писать... http://www.cyberforum.ru/cpp-beginners/thread955866.html
C++ Не понимаю код
Помогите пожалуйста разобратся в коде Код который с помощью алгоритма "Решето Эратосфена" подсчитывает все простые числа в диапазоне от 2 до 2 000 000 и подсчитывает время выполнения для заданного...
не получается составить алгоритм Шелла C++
В файле input.xtx содержатся сведения о группе студентов в формате: запись о каждом студенте группы, которая содержит следующие сведения:фамилия, имя, отчество, год рождения, оценки по пяти...
C++ Разкодировка строки http://www.cyberforum.ru/cpp-beginners/thread955859.html
Имеется задача: Шифровка (Время: 1 сек. Память: 16 Мб) Разведкой был перехвачен ряд шифровок, которые передавал Джеймс Бонд. Известно, что каждое послание зашифровано методом циклического сдвига....
C++ найти значение функции Помогите пожалуйста!! Для каждого x, изменяющегося от a до b с шагом h, найти значения функции Y(x), суммы S(x) и |Y(x)–S(x)| и вывести в виде таблицы. Значения a, b, h и n вводятся с клавиатуры.... подробнее

Показать сообщение отдельно
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,231
16.09.2013, 21:39
ну вот например
Цитата Сообщение от o33ik Посмотреть сообщение
bool test(int n)
* * {
* * * * return (bits[n >> 3] & (1 << (n & 7))) != 0;
* * }
в одном байте у тебя упаковано 8 бит
надо например проверить 20
в каком байте он лежит ?
20/8=2 значит в третьем(отсчет идет с 0)
n >> 3 это и есть делить на 8
берем это байт из массива
bits[n >> 3] получится bits[2]
там лежит 8 бит какой нам нужен?
берем остаток от деления на 8
20%8=4 (пятый бит отсчет тоже от 0)
n & 7 это остаток деления на 8
допустим там 1 вот так выглядит байт ххх1хххх(х это безразлично какое значение)
берем 1 сдвигаем её на 4
1 << (n & 7)) получаем 00010000
потом это число и байт производим операцию "И" (выделяем бит)
х х х 1 х х х х
0 0 0 1 0 0 0 0
-----------------
0 0 0 1 0 0 0 0
полученное число сравниваем с 0
0 0 0 1 0 0 0 0 не равно 0? да(true)
возвращаем true
вот так можно переписать эту функцию
C++
1
2
3
4
5
6
7
8
9
10
bool test(int n) 
{ 
 int tmp1=n/8;
 int tmp2=n%8;
 unsigned char bt1=bits[tmp1];
 unsigned char bt2=0x01<<tmp2;
 unsigned char bt3=bt1&bt2;
 bool bl=bt3!=0;
 return bl;
}
так более понятно?
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.