Big endian和little endian上的程序

时间:2013-12-23 10:23:20

标签: c++ c endianness computer-architecture

我正在阅读关于小端的大端,并遇到了这些概念

   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 program_name)编译它时.i得到警告说

   integer constant is too large for ‘long’ type

1 个答案:

答案 0 :(得分:6)

该代码针对无符号64位数据类型在little endian和big endian之间执行切换。

查看第一个子表达式:

(number & 0x00000000000000ff) << 56

这会掩盖0-7位,并将它们向左移动56.所以它们现在占据位56-63。

下一个子表达式:

(number & 0x000000000000ff00) << 40

这会掩盖8-15位,并将它们向左移动40位。依此类推,等等。

如果正在编写代码,我会使用按位或|,而不是算术添加,+,因为在我看来,这样做会更好。