Как найти Tmax без использования сдвиговC++

Программы на C++. Форум разработчиков
Anonymous
Как найти Tmax без использования сдвигов

Сообщение Anonymous »

Использование ТОЛЬКО

Код: Выделить всё

 ! ~ & ^ | +
Как узнать, является ли 32-битное число TMax?
TMax — это максимальное число, дополняющее до двух.
Мои мысли до сих пор были такими:

Код: Выделить всё

int isTMax(int x)
{
int y = 0;
x = ~x;
y = x + x;
return !y;
}
Это лишь одна из многих вещей, которые я безуспешно пробовал, но я просто не могу придумать свойство TMax, которое вернуло бы мне TMax. Например, добавление tmax к самому себе будет уникальным по сравнению со всеми другими целыми числами.

Вот в чем проблема:

Код: Выделить всё

/*
* isTMax - return 1 if x is the maximum, two's complement number,
*     and 0 return otherwise.
*   Legal ops: ! ~ & ^ | +
*   Max ops: 10
*   Rating: 1
*/
int isTMax(int x) {
int y = 0;
x = ~x;
y = x + x;

return !y;
}
int имеет длину 32 бита, поэтому максимальное значение, вероятно, будет 0x7FFFFFFF

Подробнее здесь: https://stackoverflow.com/questions/730 ... ing-shifts

Вернуться в «C++»