c语言位运算符和作用与异或取逆左移和右移
c语言位运算符和作用:“与”、“或”、“异或”、“反”、“左移”、“右移”
3358 www.cn blogs.com /张彭寿/p/3543056.html源地址
一.分等级
如果相应的二进制位都为1,则该位的结果值为1,否则为0
适用:
(1)清除
如果想清零一个存储单元,请查找满足以下条件的二进制数,即使所有位都为0 :
原数为1的位,新数的相应位为0。 然后通过运算两者,可以达到清零的目的。
a0010101011
b 10010100
c 00000000 //c=a b
)2)取一个数中的特定位数
如果存在整数a (2字节)并且想要获得其中的低字节,可以以比特为单位与a和8个1。
a 00101100 10101100
b 00000000 11111111
c 00000000 10101100 //c=a b
(3)保持指定的位:
a0101010100
b 00111011
c 00010000 //c=a b
二、|按位或
如果两个对应的二进制位之一为1,则该位的结果值为1。 借用逻辑学和运算的语言,坦率的冰淇淋是真的
应用:将一个数据的部分位值设置为1
a 00110000
b 00001111
c 00111111 //c=a | b
三、^位异或
如果参加运算的两个二进制位的值相同则为0,否则为1
应用:不使用临时变量,交换两个值
计算前:
a=3,即011(2; b=4,即100(2) )。
计算过程:
a=a ^ b; //即111=011 ^ 100
b=b ^ a; //即011=100 ^ 111
a=a ^ b; //即100=111 ^ 011
计算后:
a=100(2)即4; b=011(2)即3;
四、~反
~是一元运算符,用于按位反转一个二进制数。 也就是说,将0变为1,将1变为0
五.向左移动
用于将一个数的各二进制位全部向左移动n位,向右补充0
六.向右移动
将一个整数的各二进制比特向右移位n位,将向右移位的低位舍弃,相对于无符号的整数,高位补充0
七.原码、反码、补码的基础概念和计算方法
在调查机器为什么使用补码之前,首先要考虑原码、反码、补码的概念“杂证煮? 计算机必须以一定的编码方式保存。 原代码、反码、候补代码是机器存储具体数字的编码方式。
)1)源代码
原始代码是代码位加上真值的绝对值,即第一位表示代码,其馀位表示值。
例如如果是8位二进制:
[ 1]原=0000 0001
[-1]原=1000 0001
第一位是符号位。 第一位是符号位,因此8位二进制数的可能范围为:
[ 111111,0111111 ]即[-127,127 ]
源代码是人脑最容易理解和计算的表示方法。
)2)反码
反码的显示方法是:
正数的反码是它本身
负数的反码基于其原始码,码的比特不变,其馀各位取反
[ 1]=[00000001]原=[00000001]反
[-1]=[10000001]原=[11111110]反
当反码表示负数时,人脑无法直观地看到其数值。通常将其转换为原始代码进行计算。
)3)补码
补数的表示方法为:
正数的补数是它本身
负数的补数,根据其原符号,符号的位数不变,剩下的各位取反,最后1.(即根据反符号1 ) )。
[ 1]=[00000001]原=[00000001]反=[00000001]补
[-1]=[10000001]原=[11111110]反=[11111111]补
关于负数,补数的表示方法人脑也无法凭直觉识别其数值.通常需要转换成原始代码计算其数值.
补数例: 16位变量求补数,如-266补数求法:()0xfef6 )1)结果为0xfef6
参考: http://liuye 066.iteye.com/blog/707114
关于c语言位运算符及其作用和异或逆左移和右移的教程