Как найти 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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