c++ - 除以 2 的因子和字节操作 C++

标签 c++ bit division cpu-registers

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

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

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

最佳答案

访问整数的高位/低位字节并交换它们可以至少两种方式完成。 >>>| 的组合,或者与 union 的组合。

例如:

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

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

用右移优化 2 的倍数除法 (>>>) 是非优化。您应该编写可读代码,清楚地了解其意图。编译器将毫不费力地执行此类微优化。

关于c++ - 除以 2 的因子和字节操作 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13765273/

相关文章:

c++ - 将项目源代码与 CMake 下的 boost 测试链接起来

c++ - txt 文件的输入在第二次读取/传递时不匹配 (C++)

c - C 中整数的商

c# - 如何解决试图在 C# 中除以零?

c++ - 从文件中读取位

algorithm - 以大 O 表示法 N 翻倍时的运行时间比率

c++ - 当它应该是字符串时输入接受字符?

c++ - 自动与字符串文字

sql - 在 pl/sql 中做 bitor 的好方法是什么?

java - 在挑战中结合 c = c & (1 << bit) 和 int c = passkey.charAt(i % passkey.length()