Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? 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