Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
6年前关闭。
我读的是小端到大端,并遇到了这些概念
基本上它是做什么的?
当我使用(gcc -lrt -lm program_name)编译它时,我收到警告说
这会屏蔽掉0-7位,并将它们向左移动56。因此,它们现在占据了56-63位。
和下一个子表达式:
这会屏蔽掉8-15位,并将它们向左移动40。等等,依此类推。
如果正在编写代码,我将使用按位或
想改善这个问题吗? Update the question,因此它是on-topic,用于堆栈溢出。
6年前关闭。
我读的是小端到大端,并遇到了这些概念
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)编译它时,我收到警告说
integer constant is too large for ‘long’ type
最佳答案
对于无符号的64位数据类型,该代码在little endian和big endian之间进行切换。
查看第一个子表达式:
(number & 0x00000000000000ff) << 56
这会屏蔽掉0-7位,并将它们向左移动56。因此,它们现在占据了56-63位。
和下一个子表达式:
(number & 0x000000000000ff00) << 40
这会屏蔽掉8-15位,并将它们向左移动40。等等,依此类推。
如果正在编写代码,我将使用按位或
|
而不是算术加法+
,因为在我看来,这样更好。关于c++ - 大端和小端程序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20741488/
10-11 15:29