Привет, у меня возникла небольшая концептуальная проблема с битооперациями. Посмотрите код ниже, где у меня есть 4-байтовое без знака int. Затем я получаю доступ к отдельным байтам, присваивая адрес неподписанным символам.
Затем я устанавливаю значение последнего байта равным единице. И выполните сдвиг вправо на целое число без знака (переменная 4 байта). Я не понимаю, почему эта операция явно изменяет содержимое 3-х байтов.
См. Приведенный ниже код вместе с выводом при его запуске
#include <cstdio>
int main(int argc,char **argv){
fprintf(stderr,"sizeof(unsigned int): %lu sizeof(unsigned char):%lu\n",sizeof(unsigned int),sizeof(unsigned char));
unsigned int val=0;
unsigned char *valc =(unsigned char*) &val;
valc[3] = 1;
fprintf(stderr,"uint: %u, uchars: %u %u %u %u\n",val,valc[0],valc[1],valc[2],valc[3]);
val = val >>1;
fprintf(stderr,"uint: %u, uchars: %u %u %u %u\n",val,valc[0],valc[1],valc[2],valc[3]);
return 0;
}
sizeof(unsigned int): 4 sizeof(unsigned char):1
uint: 16777216, uchars: 0 0 0 1
uint: 8388608, uchars: 0 0 128 0
Заранее спасибо