W C ++ jaka jest różnica między 1 a 1i64?

Przekształcam niektóre 32-bitowe kody w 64-bitowe - i trafiłem na szkopuł. Kompiluję projekt VS2008 x64 i otrzymuję to ostrzeżenie:

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

Oto oryginalny wiersz kodu:

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

A oto jak to wygląda, gdybym podążałPorady Microsoft:

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

Czy jest to bezpieczne, gdy kod zostanie skompilowany na systemach 32-bitowych i 64-bitowych? Jeśli tak, proszę wyjaśnić, dlaczego muszę dodać „i64” do końca i dlaczego nie wpłynie to na kompilację 32-bitową. W przeciwnym razie doceniłoby to obejście.

Poza tym mam coś, co wygląda na jeszcze trudniejszy fragment kodu.

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

Rozumiem, że „u” oznacza, że ​​cyfra jest niepodpisana, ale po co określać, że na wartości, która nie przekracza podpisanej wartości maksymalnej… Zgaduję, że ma to coś wspólnego z przesunięciem bitowym?

questionAnswers(4)

yourAnswerToTheQuestion