Чтобы понять, что означает unsigned, нужно понимать целые числа, подписанные и без знака. Для полного объяснения двойного комплимента поиск в Википедии, но в двух словах, компьютер сохраняет отрицательные числа, вычитая отрицательные числа из 2^32 (для 32-разрядного целого числа). Таким образом, -1 хранится как 2^32-1. Это означает, что у вас есть только 2^31 положительных чисел, но это у вас.Это известно как значащие целые числа (так как он может иметь положительный или отрицательный знак)
Unsigned сообщает компилятору, что вы не хотите комментировать два слова и имеете дело только в положительных числах. Когда -1 типаж (как это в коде) к неподписанных Int становится
2^32-1 = 0b111111111...
Так что это простой способ получить целую кучу 1s в двоичном виде.
Используйте неподписанные редко. Если вам нужно выполнить бит-операции или по какой-то причине нуждаются только в положительных целых числах больше 2^31. В противном случае, если вы его не укажете, C++ принимает целые числа со знаком.
Уже ответил здесь: http://stackoverflow.com/questions/621290/what-is-the-difference-between-signed-and-unsigned-variables –
'Const INT HASH_MASK = MAX_INT;' кажется как лучшая ставка для меня. Или, наверное, 'std :: numeric_limits :: max()' в C++? –