Является ли ((a + (b & 255)) & 255) таким же, как ((a + b) & 255)?

Я просматривал код C ++ и нашел что-то вроде этого:

(a + (b & 255)) & 255

Двойной И раздражал меня, поэтому я подумал:

(a + b) & 255

(a а такжеb 32-разрядные целые числа без знака)

Я быстро написал тестовый скрипт (JS), чтобы подтвердить мою теорию:

for (var i = 0; i < 100; i++) {
    var a = Math.ceil(Math.random() * 0xFFFF),
        b = Math.ceil(Math.random() * 0xFFFF);

    var expr1 = (a + (b & 255)) & 255,
        expr2 = (a + b) & 255;

    if (expr1 != expr2) {
        console.log("Numbers " + a + " and " + b + " mismatch!");
        break;
    }
}

Хотя сценарий подтвердил мою гипотезу (обе операции равны), я все еще не доверяю, потому что 1)случайный и 2) я не математик,Я понятия не имею, что я делаю.

Кроме того, извините за название Lisp-у. Не стесняйтесь редактировать это.

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

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