Почему x>>1
не всегда такой же, как x/2
?Почему x >> 1 не всегда такой же, как x/2?
Особенно, когда это отрицательное нечетное число, например:
x = -3;
Assert.assertNotEquals(x/2, x >> 1);
x = 3;
Assert.assertEquals(x/2, x >> 1);
Спасибо за любые помогает.
Я тестировал это в c и -3 >> 1 = -2. Согласно http://www.cs.mun.ca/~michael/c/op.html, «>> возвращает expr1 сдвинутые правые выражения expr2, если тип выражения expr1 подписан, 1 бит сдвинут в высокий биты порядка, иначе 0 бит сдвинуты. Математически эквивалентно expr1/2expr2. " Они кажутся ошибочными в том, что они математически эквивалентны, но смещение в 0 или 1 в зависимости от знака кажется правильным. –
@TonyRuth: Ваш источник ошибочен. Не существует определенного определения [целочисленного деления] (https: //en.wikipedia.org/wiki/Division_ \ (математика \) #Of_integers), если дивиденд не делится на делитель; так как операторы '/' и operator '>>' * * определены как *, они явно не * математически * эквивалентны. Кроме того, вы говорите о C; Я прямо рассматриваю языковые несовместимости в моем последнем абзаце. – Amadan
, когда я тестирую в java '-3 >> 1 = -2'. –