C++ 除以系数2和字节运算C++;

C++ 除以系数2和字节运算C++;,c++,bit,division,cpu-registers,C++,Bit,Division,Cpu Registers,我知道把一个数字除以2的最好方法是向左移动一位。如果我除以2的倍数(例如8),我该怎么办?如果我除以3位,我的问题如下: 如何在C++、位移动中进行这样的操作? 如果我想交换它们的值,如何访问int的高字节和低字节 我知道这些操作可以在汇编级完成,因为我们在处理寄存器,我不知道我们是否可以访问C++中的这些东西。 访问一个整数的高/低字节,并且交换它们至少可以用两种方式来完成。既可以是>和|的组合,也可以是联合体 例如: short swapped = (original<<8)|(

我知道把一个数字除以2的最好方法是向左移动一位。如果我除以2的倍数(例如8),我该怎么办?如果我除以3位,我的问题如下:

如何在C++、位移动中进行这样的操作?
  • 如果我想交换它们的值,如何访问int的高字节和低字节

  • <>我知道这些操作可以在汇编级完成,因为我们在处理寄存器,我不知道我们是否可以访问C++中的这些东西。

    访问一个整数的高/低字节,并且交换它们至少可以用两种方式来完成。既可以是
    >
    |
    的组合,也可以是
    联合体

    例如:

    short swapped = (original<<8)|(original>>8);
    
    short-swapped=(原始8);
    
    将为您提供交换的2字节整数的两个字节。如果您有一个更大的整数(例如4个字节),那么如果所有字节都需要以特定的无序顺序排列,则需要更多的掩蔽和移位


    使用右移(
    >
    )以2的倍数优化除法是一种无优化。您应该编写可读的代码,让您清楚地了解目的。编译器将轻松地执行此类微优化。

    访问整数的高/低字节,并至少可以通过两种方式进行交换。既可以是
    >
    |
    的组合,也可以是
    联合体

    例如:

    short swapped = (original<<8)|(original>>8);
    
    short-swapped=(原始8);
    
    将为您提供交换的2字节整数的两个字节。如果您有一个更大的整数(例如4个字节),那么如果所有字节都需要以特定的无序顺序排列,则需要更多的掩蔽和移位


    使用右移(
    >
    )以2的倍数优化除法是一种无优化。您应该编写可读的代码,让您清楚地了解目的。编译器将轻松地执行此类微优化。

    &
    。任何像样的编译器都会优化
    x/2
    。请参阅或。如果
    一个
    位移位除以2
    (2^1)
    ,那么
    三个
    位移位除以?谷歌“c++位操作”,你会找到许多教程。
    。任何一个好的编译器都会优化
    x/2
    。请参阅或。如果
    一个
    位移位除以2
    (2^1)
    ,那么
    三个
    位移位除以?谷歌“c++位操作”,你会发现许多教程。你的意思是什么,编译器如何知道优化“int x=256/8;”
    256
    8
    都是文字。编译器只需将其替换为
    intx=32如果你写了类似
    x=y/8的东西编译器会将其转换为
    x=y>>3。没有必要编写这样的模糊代码,编译器知道如何做这些事情。我所需要做的就是把我的问题放在2的倍数上,所以我不应该有“int x=(65-1)/2”,我应该有“int x=64/2”
    (65-1)/2
    ,它也只是一个只包含文字的表达式。这将在编译时进行计算,并替换为单个整数值。运行时不进行计算。您的意思是,编译器如何知道优化“int x=256/8;”
    256
    8
    是文本。编译器只需将其替换为
    intx=32如果你写了类似
    x=y/8的东西编译器会将其转换为
    x=y>>3。没有必要编写这样的模糊代码,编译器知道如何做这些事情。我所需要做的就是把我的问题放在2的倍数上,所以我不应该有“int x=(65-1)/2”,我应该有“int x=64/2”
    (65-1)/2
    ,它也只是一个只包含文字的表达式。这将在编译时进行计算,并替换为单个整数值。运行时没有计算发生。