Мой первоначальный код взять х и превратить его в самый большой отрицательный междунар былпобитовое смещение с логическим ИЛИ в C
*x = 1 <<31 | ~ 1<<31;
который работает, но когда я попытался просто использовать
*x = 1 <<31;
Он возвратил такой же ответ может кто-то объяснить, почему это так?
Если ваш 'int' меньше 32 бит, он вызывает неопределенное поведение для слишком большого количества сдвигов. В противном случае, если это 32 бита, он вызывает неопределенное поведение, потому что '1 << 31' не может быть представлен в вашем' int'. И зачем использовать указатель? Предоставьте [mcve] и прочитайте [ask]. – Olaf
Как определено x? это переменная или указатель? это int, long, ...? – recycler
Даже когда '1 << 31 | ~ 1 << 31' "работает" (интервал фиксирован как менее двусмысленный), он не делает то, что, по вашему мнению, делает. Хуже того, он работает * потому что * он не делает то, что вы думаете, что он делает. – harold