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?