Пишу функцию с параметрами:
int nbit2s(long int x, long int n){
}
Я хочу взять 64-битное число x и выяснить, возможно ли 2-битное представление длины n в битах. Однако я ограничен использованием только побитовых операторов и исключен из использования таких операторов, как >= ‹= и условных операторов.
Например, nbit2s(5,3) возвращает 0, потому что представление невозможно.
Я не ищу никакого кода, а просто идеи, до сих пор моя идея была:
- Возьмите число n и преобразуйте его в двоичное представление.
- Сдвиг влево двоичного представления 64-n раз, чтобы получить MSB и сохранить его в переменной shift 3.Сдвиг вправо 64-n, чтобы получить начальный бит и сохранить в сдвиге
- Исходное число XOR с W, если 1, то TRUE, 0, то FALSE.
Я чувствую, что это правильно, но если бы кто-то мог объяснить, возможно, лучший способ сделать это или какие-либо ошибки, которые я, возможно, сделал, это было бы здорово.
long int x
может быть только 32-битным. Рекомендуюlong long
илиuint64_t
. - person chux - Reinstate Monica   schedule 29.01.2016