ИМХО вместо того, чтобы тащить с собой дополнительные 32 XOR-суммы, лучше в общей сумме найти ненулевой бит и ещё раз пройти по массиву, просуммировав те элементы, где он установлен. В этом случае проходов по массиву два, зато общее количество операций на каждом шаге в 32 раза меньше. И маску 1 << j тоже можно сохранить.