/ / C Використовуючи бітові оператори, вказує, чи встановлено двійкове число у всіх рівнях на 0 [дублікат] - c, логіка, біт-маніпуляція

C Використання бітових операторів вказує, чи встановлено бінарне число на рівні 0 [дублікат] - c, логіка, біт-маніпуляція

Можливі дублікати:
Знайдіть, чи встановлюється кожен білий біт 0 за допомогою побітових операторів

Інший приклад дійсно не відповідав на моє запитання, так що ось така ситуація:

Мені потрібно повернути 1, якщо всі рівнини в бітовій послідовності встановлені на 0 і повертають 0 в іншому випадку. -Я не можу використовувати умовні заяви!

Так що у мене є число 0x7f (01111111)

Я можу і маскою 0xAA (10101010)

що дає мені: 00101010

Мені потрібно зробити лише 0 або 1, так що я !! (00101010), і це дасть мені логічне значення для нього, але він повертає 1, але мені потрібно 0, щоб я міг знехтувати або використовувати іншу маску.

Я продовжую йти в кола з цим, і його водіння мені гайки, будь ласка, допоможіть і не пам'ятайте жодних условних висловлювань лише таких операторів:

! ~ & ^ | + << >>

Відповіді:

0 для відповіді № 1

Чи мені щось не вистачає? Ви отримуєте 00101010 в результаті, таким чином, не всі рівнини дорівнюють 0. У цьому випадку ви повинні повернути 0, але ви !! (двічі знехтувати) результат. Чому це? Ненульове значення відхиляється до помилкового значення, яке потім відхиляється до істини, що становить 1 ... Просто протилежне тому, що вам потрібно ...

Інший шлях: з 0x15 (00010101), всі рівнини - 0, ANDing з 0xAA дає 0, відхилений дає вірний, знову відхилений дає помилково, результат 0 ...


0 для відповіді № 2

(~ (2 ^ 1 & yournumber)) & (~ (2 ^ 3 & yournumber)),і т. д. повністю працюватиме. Не впевнений, що це найшвидший спосіб, хоча (~ (2 ^ 1 & yournumber)) & (~ (2 ^ 3 & yournumber)) і т.д. Не впевнений, що це найшвидший спосіб - і ви можете виконати функцію, щоб прокотитися і зробити це для налаштованої кількості бітів.