Преобразовать число, поменяв местами цифры каждой пары соседних цифр в двоичной записи данного натурального числа. Обмен начинается с младших разрядов. Непарная старшая цифра остается без изменения.(Нужно использовать побитовые операции)
а пример можно? Я не уверен, но вроде тут же достаточно просто поменять числа местами ( swap(a, b) )?
Replacer, ну типа свап через ксор? тогда так: int a = 69; int b = 42; a ^= b; b ^= a; a ^= b; C int a = 69; int b = 42; a ^= b; b ^= a; a ^= b;
M1h4n1k, примера нет) --- Сообщение объединено с предыдущим 1 мар 2022 M1h4n1k, я предполагаю, что нужно ввести натурально число, потом поменять цифры в двоичном коде и вывести это. Например, число 10 = 1010, меняю местами 0101. Вот так я это понимаю, но в виде кода не могу записать. Может быть я не прав.
zerro5, а как это тогда решать, если нет примера?) А ебать, я понял задачу только что, ахуеть (бред какой то, в первый раз увидел) Ща подумаю
zerro5, Я посидел, подумал, пришел к выводу, что надо сделать что то такое: int a = 0b101011; int sw = a XNOR ((a << 1) ^ (a >> 1)); cout << bitwise<6>(sw); C int a = 0b101011; int sw = a XNOR ((a << 1) ^ (a >> 1)); cout << bitwise<6>(sw); НО здесь 2 проблемы: 1 - В плюсах я не нашел встроенного оператора побитового XNOR'а (побитовое сравнение/побитовый xor, только обратный, например 1100 XNOR 1010 1001 ) 2 - (a << 1) не обрезает число, т.е. 0b1010 << 1 = 0b10100, а хотелось бы 0b0100, но это вроде не особо проблема, если придумать xnor
M1h4n1k, если я правильно понял условие задачи то 11 должно превратиться в 7 (1011 -> 0111), 26 -> 21 (11010 -> 10101)
vtlstolyarov, именно так --- Сообщение объединено с предыдущим 2 мар 2022 M1h4n1k, вот такие задачки в вузе. Показали презентацию про побитовые операции и все.
zerro5, Как-то так? #include <stdio.h> int main() { int number; printf("Введите число: "); scanf("%d", &number); for (int mask = 3, rest = number; mask != 0 && (rest & ~1) != 0; mask <<= 2, rest >>= 2) { number = (~mask & number) | (mask & ((mask & number) << 1) | ((mask & number) >> 1)); } printf("Ответ: %d", number); return 0; } C #include <stdio.h> int main() { int number; printf("Введите число: "); scanf("%d", &number); for (int mask = 3, rest = number; mask != 0 && (rest & ~1) != 0; mask <<= 2, rest >>= 2) { number = (~mask & number) | (mask & ((mask & number) << 1) | ((mask & number) >> 1)); } printf("Ответ: %d", number); return 0; }