Witam
Przy pisaniu programu natknąłem się na pewien problem:
uint64var = ( *(allocatedMemory+uint64var) & 0xff) + (( *(allocatedMemory+uint64var + 1) & 0xff) << 8) + (( *(allocatedMemory+uint64var + 2) & 0xff) << 16) + (( (allocatedMemory+uint64var + 3) & 0xff) << 24)
+ (((allocatedMemory+uint64var + 4) & 0xff) << 32) + (( *(allocatedMemory+uint64var + 5) & 0xff) << 40) + (( *(allocatedMemory+uint64var + 6) & 0xff) << 48)
+ (( *(allocatedMemory+uint64var + 7) & 0xff) << 56);
Pojawia mi się dla trzech ostatnich przesunięć warning: left shift count >= width of type
Próbowałem również przetestować przesuwanie przy użyciu pętli for, ale nie zapisały się dane jak powinny.
for(i = 0; i < 8; ++i)
{
x[i] = i + 2;
y = (x[i] & 0xff) << przesuniecie;
przesuniecie += 8;
}
Gdy sprawdzam wartość if ( y == 0x0908070605040302 ), instrukcja warunkowa się nie wykonuje.
Co jest źle, i dlaczego nie mogę przesunąć wartości do najstarszych bitów typu 64-bitowego?