除以因子 2 和字节运算C++
Dividing by a factor of 2 and byte operations C++
我知道将数字除以 2 的最佳方法是向左移动一位。如果我除以 2 的倍数(例如 8),我该怎么办,我是否移动了 3 位,这是我的问题:
- 如何在C++位移动中执行此类操作?
- 如果我想交换它们的值,如何访问 int 的较高字节和 int 的较低字节?
我知道这些操作可以在程序集级别完成,因为我们正在处理寄存器,我只是不知道我们是否可以在C++访问这些东西。
访问整数的高/低字节并交换它们至少可以通过两种方式完成。要么是>>
和|
的组合,要么是union
的组合。
例如:
short swapped = (original<<8)|(original>>8);
将为您提供交换的 2 字节整数的两个字节。如果你有一个更大的整数(例如 4 个字节),如果所有字节都需要以某种特别随机的顺序进行,则需要更多的屏蔽和移位。
用右移位(>>
)优化除以2的倍数是不优化的。您应该编写可读的代码,以便清楚地了解预期内容。编译器将简单地执行此类微优化。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 使用C++中的模板和运算符重载执行矩阵运算
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- GCC本机矩阵运算库
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- 位阵列上的快速AND运算
- 字符串中int的加法运算
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 算术运算的结果类似于:C浮点变量中的1/3
- 字节到位运算符重载C++
- 在java中读取c++字节的位字段
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 一次遍历 8 个向量字节并执行按位运算
- 除以因子 2 和字节运算C++