В 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; означает, что цифра не подписана, но какой смысл указывать, что для значения, которое не превышает максимальное значение со знаком ... Я предполагаю, что это как-то связано со сдвигом битов?