移位运算用法总结 您所在的位置:网站首页 js位移运算符 移位运算用法总结

移位运算用法总结

2023-08-18 15:53| 来源: 网络整理| 查看: 265

位运算总结

原文

一、位运算应用口诀

清零取位要用与,某位置一可用或 若要取反和交换,轻轻松松用异或

二、移位运算 它们都是双目运算符,两个运算分量都是整形,结果也是整形。‘’右移:左边空出的位,如果是正数则补0,若为负数则补0或1,取决于所用的计算机系统OS X中补1。其值相当于除以2。 三、位运算符的应用(原操作数s掩码mask) 按位与& 清零特定位(mask中特定位置0,其他位为1,s = s&mask)取某数中指定位(mask中特定位置1,其他位为0,s = s&mask)按位或| 常用来将原操作数某些位置1,其他位不变。(mask中特定位置1,其他位为0 s = s|mask)位异或^ 使特定位的值取反(mask中特定位置1,其他位为0,s = s^mask)不引入第三变量,交换两个变量的值(设a = a1,b = b1,a^b^a = b) 四、应用举例 判断整数a是奇数还是偶数 a&1 = 0 偶数a&1 = 1 奇数取整数a的第k位(k = 0,1,2,…len(str(a))),即a>>k&1将int型变量a的第k位清0,即a=a&~(1>1); } 判断一个整数是不是2的幂,对于一个数 x >= 0,判断他是不是2的幂 boolean power2(int x) { return ((x&(x-1))==0)&&(x!=0); }

9、不用temp交换两个整数

void swap(int x , int y) { x ^= y; y ^= x; x ^= y; }

10、计算绝对值

int abs( int x ) { int y ; y = x >> 31 ; return (x^y)-y ; //or: (x+y)^y } 11、取模运算转化成位运算 (在不产生溢出的情况下) a % (2^n) 等价于 a & (2^n - 1) 12、乘法运算转化成位运算 (在不产生溢出的情况下) a * (2^n) 等价于 a> n 例: 12/8 == 12>>3 14、a % 2 等价于 a & 1 15、if (x == a) x= b;

   else x= a;    等价于 x= a ^ b ^ x; 16、x 的相反数表示为 (~x+1)

比较浅显的来说,左移n位就是乘以2的n次方,右移n位就是除以2的n次方。具体细节如下:

C语言里的左移和右移运算 2006-09-30 13:52

先说左移,左移就是把一个数的所有位都向左移动若干位,在C中用> 1; //i的值不会变成0x40000000,而会变成0xc0000000

就是说,符号位向右移动后,正数的话补0,负数补1,也就是汇编语言中的算术右移.同样当移动的位数超过类型的长度时,会取余数,然后移动余数个位.

负数10100110 >>5(假设字长为8位),则得到的是 11111101 //前面三个101往右移5位;

总之,在C中,左移是逻辑/算术左移(两者完全相同),右移是算术右移,会保持符号位不变.实际应用中可以根据情况用左/右移做快速的乘/除运算,这样会比循环效率高很多.

unsigned char a; a=1; //0b00000001 a



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有