zoukankan      html  css  js  c++  java
  • C语言位运算符及作用:与、或、异或、取反、左移和右移

    一、& 按位与

    如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
    应用:
    (1)清零
    若想对一个存储单元清零,即使其全部二进制位为0,只要找一个二进制数,其中各个位符合一下条件:
    原来的数中为1的位,新数中相应位为0。然后使二者进行&运算,即可达到清零目的。
    a 00101011
    b 10010100
    c 00000000 //c = a & b

    (2)取一个数中某些指定位
    若有一个整数a(2byte),想要取其中的低字节,只需要将a与8个1按位与即可。
    a 00101100 10101100
    b 00000000 11111111
    c 00000000 10101100 //c = a & b

    (3)保留指定位:
    a 01010100
    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位二进制数的取值范围就是:
    [1111 1111 , 0111 1111] 即 [-127 , 127]

    原码是人脑最容易理解和计算的表示方式。

    (2)反码
    反码的表示方法是:

    正数的反码是其本身
    负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

    [+1] = [00000001]原 = [00000001]反
    [-1] = [10000001]原 = [11111110]反

    可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

    (3)补码
    补码的表示方法是:

    正数的补码就是其本身
    负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

    [+1] = [00000001]原 = [00000001]反 = [00000001]补
    [-1] = [10000001]原 = [11111110]反 = [11111111]补

    对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

    补码举例:16位的变量求补码,比如-266的补码求法:( ( 266 ^ 0xffff ) + 1 ) 结果是0xfef6

    参考:http://liuye066.iteye.com/blog/707114

  • 相关阅读:
    北京高考零分作文(看到最后一句笑喷了!)
    关于前几天无法访问的问题
    用 PHP 读取和编写 XML DOM[转]
    Delphi对INI文件的详细操作方法
    如何在WebService中获取客户端的IP地址
    正则表达式30分钟入门教程
    [原创]shell对xml操作的脚本
    预防SQL注入攻击之我见(好文章)
    表驱动方法(非常好的数据结构)
    请教shell读写XML问题
  • 原文地址:https://www.cnblogs.com/zhangpengshou/p/3543056.html
Copyright © 2011-2022 走看看