Проверьте, является ли число x положительным (x> 0) ТОЛЬКО с помощью побитовых операторов в C - PullRequest
16 голосов
/ 12 октября 2010

isPositive - вернуть true, если x > 0, в противном случае false

Пример: isPositive(-1)

Юридические операции: ! ~ & ^ | + << >>

Макс. Операции: 8

Примечание: условные выражения не допускаются.

inline bool isPositive(int32_t x) {
  return ???;
}

Ответы [ 12 ]

0 голосов
/ 12 октября 2010

Давно не занимался ассемблером, но, насколько я помню, первая цифра в слове представляет отрицательное значение, например, 1000 равно -8, следовательно, если старший бит равен 1, то число отрицательное. Таким образом, ответ !(x>>31)

0 голосов
/ 12 октября 2010

если вы работаете с системой счисления, которая использует MSB в качестве бита обозначения, вы можете сделать:

int IsPositive(int x)
{
    return (((x >> 31) & 1) ^ 1) ^ !x;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...