Что делает унарный оператор «-» на неподписанных типах данных в C / C ++ (и на разных компиляторах)?

Например:

unsigned int numA = 66; // or anything really
unsigned int numB = -numA;
unsigned int numC = numA & numB

Я понимаю, что побитовый оператор дополнения может быть использован для получения двухс дополнением (в сочетании с +1).

Причина, по которой я спрашиваю, заключается в том, что я наткнулся на это в каком-то коде для шахматного движка. Шахматные двигатели делают многоHacky» вещи, чтобы получить абсолютную скорость, особенно в функциях генерации движения, которые вызываются миллионы раз в секунду. (Это неПомогите, это был пример генерации магического битборда - самый оптимизированный из всех). В частности, этот код шахматного движка корректно работает только при компиляции gcc (я подозреваю).

Как разные компиляторы относятся к этому? В частности, как gcc справляется с этим по сравнению с компилятором C ++ в VS Studio 2012 Express.

Благодарю.

Ответы на вопрос(4)

Ваш ответ на вопрос