神奇的位运算
来源:互联网 发布:uboot源码下载 编辑:程序博客网 时间:2024/05/27 14:14
~:各位取反运算
首先需要明确的一点:计算机存储的是二进制,是补码。~(取反运算)针对的便是补码,而且是对全部的二进制位进行取反,不论是否为符号位。
5 的补码:整数的补码,仍然为其自身,0000 0101,
~5
(1)各位取反,1111 1111 1111 1010
(2)将其转换为源码,即-1,再取反(符号位除外),1000 0000 0000 0110 ⇒ -6-5 的补码,
1000 0000 0000 0101 ⇒ 1111 1111 1111 1010(各位取反) ⇒ 1111 1111 1111 1011(再加1)
~(-5):
(1)对其补码取反(全部位),⇒ 0000 0000 0000 0100 ⇒ 4
获取一个数的符号位
x >> 31 & 0x01; // x 为 int(32位机)型整数
不使用”-“号,实现取负
~x+1; // 无论正负
实现 abs(求绝对值)
x >> 31 & 0x01 ? ~x+1 : x ; // 正数的绝对值是其自身 // 负数的绝对值是其反
判断二进制位形式中1的个数
int numOf1(int x){ int cnt = 0; while (x) { ++cnt; x &= (x-1); } return cnt;}
二进制形式中最右为1所在的位置
比如 1100 ⇒ 4, 1110 ⇒ 2,1000 ⇒ 8
(x ^ (x-1)) & x
实现对一个数二进制形式的截断
实现对一个数二进制形式的截断,使其为 2^n 的倍数;
uchar mask = 0xff << n;x &= mask;
0 0
- 神奇的位运算
- 神奇的位运算
- 神奇的位运算
- 神奇的位运算
- 神奇的位运算
- 神奇的位运算
- 神奇的C++位运算& | << >> ^ ~ %
- zoj 3432 神奇的位运算。。
- [短码基础] 神奇的位运算
- 算法之神奇的位运算
- 神奇的位运算(bitwise trick)
- 神奇的C语言二十一:谈谈位运算
- ++运算符的神奇!
- 神奇的模运算
- 神奇的位运算——二进制中1的个数
- 神奇的位运算(不会不行啊。。。被坑了好多题了。。。。)
- 神奇的位运算(不会不行啊。。。被坑了好多题了。。。。)
- 神奇的位运算——进制转换问题(16转8)
- 如何设计一个自动布局库:以SDAutoLayout为例
- 练习二1010
- 山东省第四届ACM大学生程序设计竞赛 The number of steps 概率dp
- maven安装最佳实践
- Android真机adb被酷狗等流氓软件抢占进程最好的解决办法
- 神奇的位运算
- 在字符串中有序插入一个新字符
- Mybatis传递多个参数
- 使用Docker快速打包和部署运行Disconf
- 大数求和
- Intent和PendingIntent的区别
- Java POI 导出EXCEL经典实现 Java导出Excel弹出下载框
- p1056 能量项链
- git clone从远程主机克隆一个版本库