GCC 随进位旋转
gcc rotate with carry
我想旋转一个字节(非常重要,它是 8 位)。我知道Windows提供了一个功能,_rotr8
完成这项任务。我想知道如何在 Linux 中做到这一点,因为我正在那里移植一个程序。我问这个是因为我需要将位屏蔽为 0。一个例子是这样的:
#define set_bit(byte,index,value) value ? //masking bit to 0 and one require different operators The index is used like so: 01234567 where each number is one bit
byte |= _rotr8(0x80, index) : //mask bit to 1
byte &= _rotr8(0x7F, index) //mask bit to 0
第二个分配应说明 8 位进位进位旋转(01111111 ror index)
的重要性
虽然旋转一个字节相当简单,但这是 XY 问题的典型示例,因为您实际上根本不需要旋转字节来实现您的set_bit
宏。更简单、更便携的实现是:
#define set_bit(byte,index,value) value ?
byte |= ((uint8_t)0x80 >> index) : // mask bit to 1
byte &= ~((uint8_t)0x80 >> index) // mask bit to 0
更好的是,由于这是 2014 年而不是 1984 年,因此将其设置为内联函数而不是宏:
inline uint8_t set_bit(uint8_t byte, uint8_t index, uint8_t value)
{
const uint8_t mask = (uint8_t)0x80 >> index;
return value ?
byte | mask : // mask bit to 1
byte & ~mask; // mask bit to 0
}
相关文章:
- 顺时针迭代旋转 3 位数字
- 使用 GDI+ 旋转位图,然后转换为 HDC
- 在不添加进位的情况下添加数字的C++程序
- 在 64 位整数内旋转(90°)位矩阵(最多 8x8 位)
- 在 CUDA 中使用 SIMD 实现位旋转运算符
- 在视觉工作室中以十六进制进行位移位并通过 cout 输出
- 如何处理高于 7FF.. 64 位和uint64_t类型的十六进制值
- 按位函数 AND、OR 和 XOR 在 C++ 中使用十六进制字符串
- 在C 中旋转每3位整数
- 位旋转功能
- 我如何在GDB中打印十六进制的双重位
- 如何在 AVX2 中实现车道交叉逻辑逐位移位/旋转(左和右)
- 溢出事件中的进位
- 如何仅使用数学方法旋转16x16位图数组的内容(无缩放,只需剪切角)
- 没有进位标志的大整数加法
- GCC 随进位旋转
- 无法通过进位使价值传播
- 在我的 7 位加法器中,进位不正确,我不知道为什么
- 检测32位双字+双字进位/C++
- 有效的128位加法使用进位标志