0 / 0 / 0
Регистрация: 27.10.2010
Сообщений: 41
|
|
1 | |
Найти степень двойки01.11.2010, 21:06. Показов 22965. Ответов 17
Метки нет (Все метки)
Дано целое число N>0, являющееся некоторой степенью числа 2:N=2 ^k. Найти целое число К - показатель этой степени. Если можно на С
0
|
01.11.2010, 21:06 | |
Ответы с готовыми решениями:
17
Вычислить 10-ю степень двойки сложением, умножением и просто возведением в степень. степень двойки Степень двойки Точная степень двойки |
8384 / 3616 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
|
||||||
02.11.2010, 00:20 | 2 | |||||
1
|
57 / 57 / 5
Регистрация: 31.10.2010
Сообщений: 103
|
||||||
02.11.2010, 00:31 | 3 | |||||
0
|
C/C++
93 / 93 / 18
Регистрация: 01.07.2010
Сообщений: 281
|
||||||
02.11.2010, 13:17 | 4 | |||||
0
|
G@nch:)
|
||||||
19.03.2011, 17:51 | 5 | |||||
|
37 / 3 / 0
Регистрация: 20.11.2015
Сообщений: 72
|
||||||
15.03.2016, 14:21 | 6 | |||||
Ну прям великие программисты. Правильно кому нужна математика, цикл это круто. двоичный логарифм равен разности десятичного логарифма от н и десятичного логарифма от 2
или K=log_2(N)=ln(x)/ln(2) ln на си double log10(double x) math.h
0
|
15.03.2016, 14:50 | 7 | |||||
Ну прям великий математик, правильно кому нужны битовые операции, ведь тяжелые логарифмы это круто.
0
|
GbaLog-
|
15.03.2016, 15:12
#8
|
Не по теме: Kastaneda, Вы сломали мне мозг! %-)
0
|
37 / 3 / 0
Регистрация: 20.11.2015
Сообщений: 72
|
||||||||||||||||
16.03.2016, 14:27 | 9 | |||||||||||||||
Попробую в силу своего разумения объяснить как это работает, надеюсь автор топика в противном случае меня поправит.
Первоначально определимся что мы должны найти, а должны мы найти двоичный логарифм числа, причем ответ должен быть целым. Начнем с того простого факта, что в двоичном представлении любое целое число в степени имеет только одну битовую единицу. Поясняю на примере 2^1=2=b10, 2^2=4=b100, 2^3=8=b1000, и т.д. Здесь ^ - означает возведение в степень константа начинающая на b - двоичное представление числа Интерес представляет 4 стока кода, а точнее
0&0=0 1&0=0 0&1=0 1&1=1 Как видно из таблицы TRUE мы получаем если совпадают 1-цы. Если мы отними 1 от b0010...0 то получим b0001...1, то есть единицы пресекается не будут и мы толучим FALSE. В противном случае получаем True и выводим сообщение о том что получить целый ответ не возможно. Пример 2^3=8 (нам нужно найти 3) 8=b1000 b1000-1=b0111 b1000&b0111=0 если например у нас число 9 9=b1001 b1001-1=b1000 b1001&b1000=b1000=true => ошибка, печатаем что число не подходит Нам остается только определить номер разряда единицы Дальше остальной алгоритм разберем, для кратности записи, в шенацатиричной системе. Напомню что для перевода из 0x в двоичную каждый разряд шеснацатиричной системы превращается в 4 разряда двоичной то есть 0x5=b0101 => 0x55=b0101 0101 Расмотрим что происходит с числом 128. (Как можно посчитать, его двоичный алгоритм равен 7) на всякий случай ответ для него 7 в двоичной = 111 или 0х07 и так первоначально х=0х80, в 8 строке убираем 1 получаем 0х7f или b0111 1111 разберем 9 строку
0х3f&0x55...= 0x0055 x-0x0055=0x7f-0x0055=0x2A х=0x2A 10 строка
((x >> 2) & 0x33333333) (x >> 2)=0x2A>>2=0xA ((x >> 2) & 0x33333333)=0xA&0x3=0x2 (x & 0x33333333) + ((x >> 2) & 0x33333333) = 0x22+0x2=0x24 x=0x24 (x + (x >> 4))=0х26 (x + (x >> 4)) & 0x0F0F0F0F=0х26 & 0x0F=0х6 x=0x6 x=0x6+0=0x6 x=x&0x3f=0x06&0x3f=0x6
0
|
Любитель чаепитий
|
|
16.03.2016, 14:51 | 10 |
SemenovSA, Да, но ответ должен быть 7, а у вас 6 получилось. Что-то вы упустили. Я, конечно, пытался понять это всё не расписывая каждое 16-иричное выражение на 2-ичное, но я не понимаю как работает оператор & для 16-ичных чисел. :^(
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
16.03.2016, 16:25 | 11 |
0х3f&0x55...= 0x0015
математики, они такие можно же cout в код понапихать и списать результат Добавлено через 9 минут Не по теме: и да, чего мы в теме 2010 года забыли? Добавлено через 46 минут GbaLog-, хотя поясню на всякий логику на том же примере 128 в бинарном виде сначала х= 10000000 x -= 1 ; //изменяем нули на единицы01111111 Далее _ разделяет то, что мы рассматриваем как отдельное число. x = x - ((x >> 1) & 0x55555555) ; //разбиваем биты на пары и в каждую пару записываем кол-во единиц исходного Х0_1__1_1__1_1__1_1 01___10___10___10 (1_1 - две единички; 1+1 = 2 -> 10 в бинарной.) x = (x & 0x33333333) + ((x >> 2) & 0x33333333); // повторяем фокус, на этот раз разбивая число на группы из 4х битов01_10___10_10 0011____0100 (теперь мы складываем значения пар битов, т.е. 01_10 -> 1 + 2 = 3 -> 0110) Повторяем, пока все биты не будут просуммированы в последний байт. x = (x + (x >> 4)) & 0x0F0F0F0F ;0011____0100 00000111 (3+4 = 7) в этом примере дальше остались только нули x = x + (x >> 8); И отбрасываем все, кроме него, т.к результат < 32 x &= 0x0000003F;
1
|
39 / 39 / 8
Регистрация: 03.05.2013
Сообщений: 178
|
|
16.03.2016, 16:37 | 12 |
1
|
Любитель чаепитий
|
|
16.03.2016, 18:42 | 14 |
castaway, Для вас, возможно, это очевидно, но я не понимаю, как так же? Я понимаю, что 1 & 0 = 0, но я не понимаю, например, как С & 6 = 4.
Если есть какой-то определенный алгоритм этих вычислений(вместо тупого зазубривания), то буду рад прочесть, услышать, увидеть или воспринять любым из своих органов чувств.
0
|
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
|
|
16.03.2016, 18:47 | 15 |
GbaLog-, переводите в двоичную, считаете, переводите обратно. Больше практики и все само запомнится
С = 1100; 6 = 0110 1100 & 0110 ____ 0100 0100 = 4
1
|
16.03.2016, 18:51 | 16 | |||
Пусть переменная С равна 4, что в двоичном представлении равно 100, а число число 6 в двоичном представлении равно 110, то применив поразрядно к этим двум числам операцию побитового И, получим:
равно
0
|
Любитель чаепитий
|
|
16.03.2016, 18:55 | 18 |
КОП, castaway, А, я совсем и забыл, что могу так. Вот я растяпа!
Ferrari F1, С - не переменная, надо было указать что это число 13 в 16-чной системе.
0
|
16.03.2016, 18:55 | |
16.03.2016, 18:55 | |
Помогаю со студенческими работами здесь
18
Точная степень двойки Максимальная степень двойки Степень двойки и остаток от деления Степень двойки в степени десятки Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |