除以因子 2 和字节运算C++

Dividing by a factor of 2 and byte operations C++

本文关键字:字节 运算 C++      更新时间:2023-10-16

我知道将数字除以 2 的最佳方法是向左移动一位。如果我除以 2 的倍数(例如 8),我该怎么办,我是否移动了 3 位,这是我的问题:

  1. 如何在C++位移动中执行此类操作?
  2. 如果我想交换它们的值,如何访问 int 的较高字节和 int 的较低字节?

我知道这些操作可以在程序集级别完成,因为我们正在处理寄存器,我只是不知道我们是否可以在C++访问这些东西。

访问整数的高/低字节并交换它们至少可以通过两种方式完成。要么是>>|的组合,要么是union的组合。

例如:

short swapped = (original<<8)|(original>>8);

将为您提供交换的 2 字节整数的两个字节。如果你有一个更大的整数(例如 4 个字节),如果所有字节都需要以某种特别随机的顺序进行,则需要更多的屏蔽和移位。

用右移位(>>)优化除以2的倍数是不优化的。您应该编写可读的代码,以便清楚地了解预期内容。编译器将简单地执行此类微优化。