Вот два кода, которые, кажется, делают то же самое, но это не так.Эти два отличия при запуске и сравнение вывода с трассировкой приводят в замешательство, поскольку кажется, что первая обработка кода является машинно-зависимым кодом.Пожалуйста, прочитайте два кода
Код 1: -
unsigned char c=(((~0 << 3) >> 4) << 1);
printf("%d", c);
Выход: - 254
Код 2: -
unsigned char c=(~0 << 3);
c >>= 4;
c <<= 1;
printf("%d", c);
Выход:-.30
Вывод вышеприведенного кода отличается.
Не только этот код (1-й код) приводит к путанице, но и все типы кода, включающие однострочный оператор многократного побитового сдвига, дают неожиданные результаты.
2-й код работает правильно.
Пожалуйста, запустите этот код на своем компьютере и проверьте вышеприведенный вывод
И / ИЛИ
Объясните, почему эти выходные данные не совпадают.
ИЛИ
Наконец, мы должны понять, что мы не должны применять оператор многократного побитового сдвига в нашем коде.
Спасибо