программа на Big Endian и Little Endian

Я читал о порядке байтов с прямым порядком байтов и наткнулся на эти концепции

   long long number

(((number & 0x00000000000000ff) << 56) +
((number & 0x000000000000ff00) << 40) +
((number & 0x0000000000ff0000) << 24) +
((number & 0x00000000ff000000) << 8) +
((number & 0x000000ff00000000) >> 8) +
((number & 0x0000ff0000000000) >> 24) +
((number & 0x00ff000000000000) >> 40) +
((number & 0xff00000000000000) >> 56 ))

что в основном это делает?

Когда я компилирую его, используя (gcc -lrt -lm имя_программы). Я получаю предупреждение

   integer constant is too large for ‘long’ type

-1

Решение

Этот код выполняет переключение между прямым и прямым порядком байтов для 64-битного типа данных без знака.

Посмотрите на первое подвыражение:

(number & 0x00000000000000ff) << 56

Это маскирует биты 0-7 и сдвигает их влево на 56. Таким образом, они теперь занимают биты 56-63.

И следующее подвыражение:

(number & 0x000000000000ff00) << 40

Это маскирует биты 8-15 и сдвигает их влево на 40. И так далее, и так далее.

Если бы писал код, я бы использовал побитовое или, |, а не арифметическое сложение, +, так как это выглядит лучше, на мой взгляд.

6

Другие решения

Других решений пока нет …