【发布时间】:2021-02-28 22:02:31
【问题描述】:
我需要找到signed int N 的最高位并将其保存在signBitN 中。我想使用仅按位操作来做到这一点。 另外,我将如何使 signBitN 扩展以使其所有位都等于其有效位。 即如果它的有效位为零,我将如何将其扩展为 00000...00? 我得到的最接近的是 signBitN=1&(N>>(sizeof(int)-1));
【问题讨论】:
-
什么是 N?是否要查找特定类型的符号位,例如
int或int16_t? -
换档
(CHAR_BIT*sizeof(int)-1) -
与明显的
(N < 0)或(N < 0) ? -1 : 0相比,使用位运算符执行此操作并没有特别的好处。如果有聪明的按位方法,让编译器的优化器为您插入它们。 Example. -
N 是有符号整数
-
你是在问什么是最高位,还是要找到第一个
1?
标签: c bit-manipulation bitwise-operators bit-shift bitwise-and