Оптимизация при помощи сдвига
Операторы сдвига дают возможность быстро выполнять операции умножения и деления на степени двойки. Сдвиг вправо на один бит эквивалентен делению на 2, соответственно, аналогичный сдвиг влево является умножением на 2 (в редких случаях, когда компилятор в С или C++ не выполняет расширение знакового бита при сдвиге вправо отрицательных чисел, у вас не получится проделать данную операцию при делении на отрицательное число).Порядок следования байтов
Порядок следования байтов описывает очередность представления байтов в многобайтных значениях. С технической точки зрения их можно представить как структурные единицы многокомпонентного значения, например, компьютер может пользоваться 16-битным представлением байтов вместо 8-битного. Многобайтные последовательности применяются для представления некоторых базовых типов данных.
Порядок следования байтов обычно прозрачен, если данные остаются в системе одного типа. Проблемы возникают при обмене данными между системами с различным порядком следования байтов. Большинство языков программирования по умолчанию записывают данные в файлы и на сетевые устройства, используя принятый в системе порядок следования байтов. Это означает, что, если программа, никак не влияющая на порядок следования байтов, запишет данные в системе с прямым порядком, они, скорее всего, будут неверно интерпретированы этой же программой, но работающей на компьютере с обратным порядком следования байтов. По большей части этот параметр задается процессором, но виртуальная машина Java придерживается обратного порядка следования байтов вне зависимости от типа процессора.
Как мы можем исследовать отдельные биты целого числа? В языке С символ принадлежит однобитному типу данных. Им можно воспользоваться для представления целого числа в виде четырех последовательных символов. Для этого нам потребуется указатель на целое число. Затем можно осуществить приведение указателя на целое к указателю на символ. В результате мы получим доступ к целому числу как к массиву одноразрядных данных. Указатель на символ позволяет исследовать байты и определить их формат.
В частности, для определения порядка следования байтов на конкретном компьютере направьте указатель на целое со значением 1. Затем осуществите приведение этого указателя к char. Это изменит размер данных, на которые нацелен указатель. После разыменования указателя вы получите доступ к одноразрядному символу вместо 4-разрядного целого. Остается только проверить, равен ли единице первый байт. Равенство указывает на прямой порядок следования байтов на компьютере, то есть от младшего к старшему, так как LSB-байт находится по наименьшему адресу в памяти. Если же значение этого байта равно 0, компьютер использует обратный порядок следования байтов, ведь в этом случае наименьший адрес в памяти занимает MSB-байт.