Является ли ((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-у. Не стесняйтесь редактировать это.