У меня есть несколько вопросов, которые понимают оператор сдвига влево. Я знаю, что если сдвиг на х количество бит влево, поэтому довольно много умножает число на 2 на мощность числа сдвинутых битов.Нужна помощь в понимании оператора левого сдвига в C
Но рассмотрим эту программу:
int a=4,*pA=&a,r3;
printf("%d\n",pA);
printf("%d\n",(*pA<<2));
r3=pA-(*pA<<2);
printf("%d",r3);
Он печатает мкА, и (* пА < < 2) отдельно, и если вы должны были вычесть эти два, он не будет равно r3 написано в выражение, выключенное в 4 раза, которое является размером int. Но где вам нужно учитывать размер int, так как у вас есть как pA, так и (* pA < < 2), а их вычитание не соответствует тому, что должно быть.
Любая помощь приветствуется ...
Для записи, я не заинтересован в распечатке фактическое значение указателя, но на самом деле его адрес сдвигается на 2 бита. И я не понимаю точного процесса, который происходит.
Что это, чего вы ожидали? – Downvoter
Для a = 4, pA появляется как 2686724, а * pA << 2 - 80. Но r3 появляется как 2686404, а не 2686644. – Radu
'pA' - указатель. Вы печатаете адрес указатель. Чтобы напечатать фактическое значение, вам нужно будет разыменовать его. – tambre