摘要: 实例十二:右循环移位 方法:result=n>>k|n<<(32-k) (1) b:将n的右端的k位先放到b中的高位中。 b=n<<(32-k); (2) c:将n右移k位,其左边高位k位补0。 c=n>>k; (3) 将b和c进行或操作. 简化例子: x=n<<4 x保存n左移4位后的数 y=n> 阅读全文
posted @ 2017-03-28 16:50 gd_沐辰 阅读(396) 评论(0) 推荐(0) 编辑
摘要: 实例十一:取n的某些位 方法:result=(n>>4)&(~(~0<<4)) 取出某数n的低4位。 数值0 0000 0000 ~0 1111 1111 ~0<<4 1111 0000 ~(~0<<4) 0000 1111 int _tmain(int argc, _TCHAR* argv[]){ 阅读全文
posted @ 2017-03-28 16:48 gd_沐辰 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 位运算:是直接对整数在内存中的二进制位进行操作,效率高。 位运算的分类: ~ 按位取反 ^ 异或 | 按位或 & 按位与 && 逻辑与 || 逻辑或 ! 逻辑非 << 左移 >> 右移 >>> 右移 0填充 为了方便,以下二进制位以8位。 位与&:是参与运算的两数各对应的二进位相与, 有0为0,全1 阅读全文
posted @ 2017-03-28 16:46 gd_沐辰 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 实例十:n的相反数 方法:result=(~n)+1 正数 负数 原数 0000 0011 1111 1111补码 1111 1100 0000 0010加一 1111 1011 0000 0011 1、正数 对于正数的相反数来说,补码就是除符号位变为1,其他不变,计算机中 对于一个数字来说存储的都 阅读全文
posted @ 2017-03-28 16:44 gd_沐辰 阅读(551) 评论(0) 推荐(0) 编辑
摘要: 实例九:除法运算转成位运算 方法:n>>k 等价于 n/(2^k) 右移一位相当于除以2。 比如 9/4=2 n=9,4=2^2 所以k=2,即右移2位。用9>>2可以实现。 解释: 原数 0000 1000 8右移一位 0000 0100 4 相当于除以2再右移一位 0000 0010 2 代码: 阅读全文
posted @ 2017-03-28 16:43 gd_沐辰 阅读(2027) 评论(0) 推荐(1) 编辑
摘要: 实例八:乘法运算转成位运算 方法:n<<k 等价于 n*(2^k) 左移一位相当于乘以2。 比如 9*4=36 n=9,4=2^2 所以k=2,即左移2位。用9<<2可以实现; 解释: 原数 0000 0010 2左移一位 0000 0100 4 相当于乘2再左移一位 0000 1000 8 代码: 阅读全文
posted @ 2017-03-28 16:42 gd_沐辰 阅读(1509) 评论(0) 推荐(0) 编辑
摘要: 实例七:模运算转成位运算 方法:n &(((1<<k)-1) 等价于 n %(2^k) 一个数除以一个2的k倍,即左移k位。 比如:15%4 n=15,k=2. k左移1位扩为4.再减一和n进行与操作。 解释:2的几次幂就左移几位。 8 15原数 0000 1100 0000 11114 0000 阅读全文
posted @ 2017-03-28 16:41 gd_沐辰 阅读(816) 评论(0) 推荐(0) 编辑
摘要: 实例六:绝对值 32位系统方法:y=x>>31 result=x^y-y; x是要求绝对值的值,y为临时变量,result为x的绝对值。 一个负数右移31位后位-1;正数则为0; 为了方便 ,以8位位解释。 负数解释:原数 1100 0011 -3 方法中的x 移位31位 1100 0001 -1 阅读全文
posted @ 2017-03-28 16:39 gd_沐辰 阅读(200) 评论(0) 推荐(0) 编辑
摘要: 实例五:n是否是2的幂 方法一:result=n&(n-1) 如果result=0 则n是2的幂方法二:result=n&((~n)+1) 如果result=n 则n是2的幂 原数 0000 1000 8 0000 1000 8原数+1 & 0000 1001 9 & 0000 0111 7 原数- 阅读全文
posted @ 2017-03-28 16:37 gd_沐辰 阅读(292) 评论(0) 推荐(0) 编辑
摘要: 实例四:将n的k位s置1 方法:result =n|(1<<k) 只使k位变为1,其他位为0,再进行或操作,1与任何数的或操作都是1. 解释: 原数 0000 1011 11 数值1 0000 0001 11左移 0000 0100 4和原数或操作 0000 1111 //与原数比0变为1 值为15 阅读全文
posted @ 2017-03-28 16:35 gd_沐辰 阅读(134) 评论(0) 推荐(0) 编辑