В C ++, в чем разница между 1 и 1i64?

Я конвертирую некоторый 32-битный совместимый код в 64-битный - и я попал в ловушку. Я компилирую проект VS2008 x64 и получаю следующее предупреждение:

warning C4334: '<<' : result of 32-bit shift implicitly converted to 64 bits
(was 64-bit shift intended?)

Вот оригинальная строка кода:

if ((j & (1 << k)) != 0) {

И вот как это выглядит, если я следуюСовет Microsoft:

if ((j & (1i64 << k)) != 0) {

Безопасно ли это делать, когда код будет скомпилирован как в 32-разрядных, так и в 64-разрядных системах? Если это так, пожалуйста, объясните, почему я должен добавить «i64» до конца, и почему это не повлияет на 32-битную компиляцию. В противном случае, обходной путь будет высоко ценится.

Помимо этого, у меня есть то, что выглядит как еще более хитрый код.

if (id[j] != id[j ^ (1u << k)]) {

Я понимаю, что & quot; u & quot; означает, что цифра не подписана, но какой смысл указывать, что для значения, которое не превышает максимальное значение со знаком ... Я предполагаю, что это как-то связано со сдвигом битов?

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

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