Я пишу функцию с параметрами:Нахождение 2s п бит длина дополнить представление числа
int nbit2s(long int x, long int n){
}
Ищу взять в 64-битном числа х, и найти, если 2 битное представление п длина бит. Тем не менее, мне ограничивается использование только побитовых операторов и исключение из использования таких операторов, как> = < =, а условные операторы
Например, nbit2s (5,3) возвращает 0, потому что представление невозможно.
Я не ищу для любого кода, но только идеи, до сих пор моя идея была:
- Возьмите число п и преобразовать его в это двоичное представление.
- сдвига влево двоичного 64-п раз, чтобы получить MSB и хранить, что в переменном сдвиге 3.Shift к правому 64-п, чтобы получить ведущий бит и магазин в смене
- XOR оригинального номер с W, если 1 затем TRUE, 0, затем FALSE.
Я чувствую, что это происходит по правильным линиям, но если кто-то может объяснить, возможно, лучший способ сделать это или какие-либо ошибки, которые я, возможно, сделал, это было бы здорово.
'long int x' может быть только 32-битным. Рекомендуем 'long long' или' uint64_t'. – chux
У меня создалось впечатление, что длинный int был 64 бит на машине Mac и хранился как 32 бит на машинах Windows. –
Я чувствую, что вы делаете тот же курс: https://stackoverflow.com/questions/9122636/finding-how-many-bits-it-takes-to-represent-a-2s-complement-using-only-bitwise https://stackoverflow.com/questions/8204075/minimum-bits-required-for-twos-complement-number-representation – viraptor