C#位操做

一.原码与补码

  在计算机系统中,数值一概用补码来存储(表示)。主要缘由:使用补码,能够将符号位和其余位统一处理;同时减法也可按加法来处理。另外,两个补码表示的数相加时,若是最高位(符号位)有进位,则进位被舍弃。spa

 

1.原码转补码分两种状况
(1)正数的补码:与原码相同(已知原码求补码)
  例如:+9的原码是0000 1001。补码也是0000 1001。class


(2)负数的补码:符号位为1,其他位为该数绝对值的原码按位取反,而后整个数加1。
  例如:-7原码为1000 0111(高位为符号位,1表示负数,0表示正数),补码为1111 1001.效率

 

2.补码转原码也分两种状况(已知补码求原码)
(1)正数的原码:与补码相同
  例如:+9的补码是0000 1001。原码也是0000 1001。计算机


(2)负数的原码:符号位为1,其他位为该该补码按位取反,而后整个数加1。
  例如:-7的补码是1111 1001,原码是1000 0111。移动

.移位运算符   

  左移 (<<) 浮点数

  将第一个操做数向左移动第二个操做数指定的位数,空出的位置补0。
  左移至关于乘. 左移一位至关于乘2;左移两位至关于乘4;左移三位至关于乘8。位运算

  x<<1等于 x*2
  x<<2等于x*4 运算符

  同理, 右移即相反:系统

  右移 (>>)
  将第一个操做数向右移动第二个操做数所指定的位数,空出的位置补0。

  右移至关于整除. 右移一位至关于除以2;右移两位至关于除以4;右移三位至关于除以8。

  x>>1等于 x/2
  x>>2等于 x/4 

由于位移比乘除速度快.对效率要求高,并且知足2的幂次方的乘除运方,能够采用位移的方式进行

位运算只能用于byte short char int long 等整型类型,不能应用于浮点数操做

相关文章
相关标签/搜索