有没有一种从0增加到1的位技巧
Is there a bitwise trick to increase only zero to one?
在c++中,是否有可能使用按位技巧实现以下功能?
(i == 0) ? 1 : i
设i
为32位无符号整数
在我看到实际结果之前,我相信您的代码更清晰,速度也更快,但是这两种方法都可以在没有条件的情况下完成相同的事情:
i + !i
或
i | !i
若i
为0,则!i
为1。通过加法或位或将0和1结合总是得到1。如果i
不为0,则!i
为0。通过加法或位或将非零值与0组合总是得到该值。因此,如果i
为0,结果为1,否则为i
。
同样,如果这两种方法中的任何一种实际上对编译器更好,我会感到惊讶。
对于使用二进制补码表示负数的计算机,可以使用下面的公式:
(!(n & -2)) | n
演示。
说明:-2的位模式除最低有效位外所有位都为1。因此,表达式n & -2
只有在n
等于0或等于1时才为0。!
将从0变为1,从任何其他数字变为0。因此,0或1将与1进行or -ed,而任何其他数字将保持不变。
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 一种在C++中读取TXT配置文件的简单方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 在运行时检查继承是否只有一种类型和 void*
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 有没有一种方法可以在C++中增加int的大小而不使用long
- 有没有一种从0增加到1的位技巧
- 有没有一种方法可以自动地赋值指针并增加计数器,而不需要锁?