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