Что значит данный кусок кода,нигде не могу найти информации!
Добрый день уважаемые пользователи,в общем задача была такая: Если все нечетные биты числа типа unsigned равняются единицам,вывести один,иначе ноль
Например: битовое представление числа "10"="1010",все нечетные биты здесь-единицы => ответ 1.
Изначально дана функция,принимающая один параметр:
int any_odd(unsigned x) {
//Ваш код.
}
Скажите пожалуйста,что делает данный кусок кода:
int any_odd(unsigned x)
{
return x & 2863311530 ? 1 : 0;
}
Также есть такой вариант:
int any_odd(unsigned x) {
return (x & 0xAAAAAAAA) ? 1 : 0;
}
Непонятны именно условия:
x & 2863311530
(x & 0xAAAAAAAA)
Заранее огромное спасибо!!
Ответы (1 шт):
Ерунду он делает :)
Он, если установлен хоть один нечетный бит, возвращает 1, иначе 0.
2863311530 в бинарном виде равно 10101010101010101010101010101010
Дальше понятно: если установлен в 1 хоть один нечетный бит в числе x, значение x&0xAAAAAAAA будет ненулевым (он даст 1 в результат). Четные биты обнулятся.
Правильнее - если и в самом деле нужны ВСЕ нечетные биты - написать
rerturn x&0xAAAAAAAA == 0xAAAAAAAA;
Но это относится только к 32-разрядным числам. Если вы хотите игнорировать все нулевые биты перед первым единичным битом числа - т.е. чтобы, скажем, 101010 проходило проверку, а 100010 - нет, то тут немного сложнее. Простейший вариант - просто циклически выполнять сдвиги на 2 разряда вправо с проверкой установленности очередного нечетного бита.