Замена для побитового оператора Java в цели c - PullRequest
0 голосов
/ 23 февраля 2012

Как я могу перевести следующий код в цель c? (Значение является целым)

while (value != 0) {
    value >>>= 1;

И есть ли вообще замена оператора >>>?

1 Ответ

1 голос
/ 23 февраля 2012

Операция не поддерживается напрямую, поэтому вам нужно использовать маску. В зависимости от размера вашей переменной value вам нужно выбрать маску другого размера. Если value равно short, используйте 0x7FFF; если value равно long long, используйте 0x7FFFFFFFFFFFFF.

while (value != 0) {
    value >>= 1;
    value &= 0x7FFFFFFF;
}

В качестве альтернативы, вы можете объявить value как беззнаковое: тогда обычное назначение shift не будет расширять знак value. Фактически, большая часть причины, по которой оператор >>> был добавлен в Java, заключается в отсутствии типов без знака в языке.

...