Помогите пожалуйста с задачей на битовые операции

Правка ru1, от VladKov, 2020-01-03 17:01:25

Привет, Помогите в объяснении решения этой задачи. Есть офф, решение, которое я все равно не понимаю,

#include <bits/stdc++.h>
using namespace std;

static const int mod = 1000000000 + 7;

static int pow2(int degree) {
    long long accum = 2;
    long long res = 1;
    for (int i = 0; i < 31; i++) {
        if (degree & (1 << i))
            res = res * accum % mod;
        accum = accum * accum % mod;
    }
    return res % mod;
}

int main() {
    int k;
    scanf("%d", &k);
    int degree = k - (k & (k - 1));
    int res = (pow2(degree) + mod - 1) % mod;
    printf("%d", res);
    
    return 0;
}

Вот не люблю битовые операции). Могу решить задачи сложнее на другие темы, но только не битовые операции) Всех благодарю

Теги битовые операции

История

 
 
 
 
Правки
 
 
  Rev. Язык Кто Когда Δ Комментарий
ru3 Русский VladKov 2020-01-03 17:02:08 2 Мелкая правка: 'перации)\nВсех бла' -> 'перации)\n\nВсех бла'
ru2 Русский VladKov 2020-01-03 17:01:49 15
ru1 Русский VladKov 2020-01-03 17:01:25 871 Первая редакция (опубликовано)