zoukankan      html  css  js  c++  java
  • C语言的运算符、位操作

    + - * / (加 减 乘 除)
    > >= < <= (大于 大于等于 小于 小于等于)
    == != (测试等于 测试不等于)

    && || ! (逻辑与 逻辑或 逻辑非)

    >> << (位右移 位左移)
    & ! (按位与 按位或)
    ^ ~ (按位异或 按位取反)


    C/C++位操作

    [写在前面]

    ^异或:不同为1,相同为0。可以记为:“异”为不同,不同为1.

    signed char 符号位是1时右 移位在左边补1。如: 

    signed char value=–104; 

    其二进制表示为10011000。使用下面的操作把它向右移动两位: 

    value »= 2; //Result 11100110

    //计算绝对值:
    int abs(int x)
    {
        int y;
        y = x >> 31; //y一定要是int型,右移结果为0xffffffff或0,若为unsigned 则右移结果为1或0
        return (x^y)-y; //or:(x+y)^y
    }

    [传统的C方式位操作]

    1、基本操作: 

    使用一个unsigned int变量来作为位容器。

    2、位操作符: 

    |:按位或操作

    如:result = exp1 | exp2;

    当exp1和exp2中对应位中有一个为1时,则result中对应位为1,否则为0。

    应用特点:与0位“或”相应的位不变,与1位“或”设置相应的位为1。

    因此用于:设置某一位为1,而保证其它的位不变。比如:result |= (1<<12)将设置result的第12位为1。

    也常用于:给某个位属性值附加上另一个属性值,比如:result |= exp;这里相当于给result附加上exp的属性。

    &:按位与操作

    如:result = exp1 & exp2;

    当exp1和exp2中对应的位都为1时,result中对应的位才为1。

    应用特点:与0位“与”相应的位为0,与1位“与”相应的位不变。0与1“与”结果为0,1与1“与”结果为1,所以也就是说bit & 1 = bit,与1进行“与”操作不改变本身。 

    因此用于:设置某一位为0,而保证其它的位不变。比如:result &= ~(1<<12)将设置result的第12为0。

    也常用于:获得某个属性的某一位或某几位。比如:result & 3 将获得result的最低的两位。再比如截取一个32位数字的低8位等等。 

    也常用于:测试某个属性是否等于或包含特定的值。比如:if(result & exp)

    ^:按位异或操作符

    如:result = exp16^exp1;

    当exp1和exp2中对应位的值不相同时,result对应的位为1。

    应用特点:1)0与1“异或”结果位1,1与1“异或”结果位0,也就是说 bit ^ 1 = ~bit,与1“异或”相当于将特定的位取反。

    因此用于:将某一特定位取反,而保证其它的位不变。比如:result = (1<<12); 将result的第12位取反。 

    也常用于:将自己清0,比如:result = reslut;将使result所以位都变成0。

    ~:反转操作符

    将位容器中的所以位都反转,将1变成0,0变成1。

    <<:按位左移操作符

    如:exp << n;

    将容器中的所有位向左移n位,空出的位用0填补。

    >>:按位右移操作符

    如:exp >> n;

    将容器中的所有位向右移n位,空出的位用0填补。

    3、C方式位操作总结:

    设置特定的位用|;

    清除特定的位用&;

    取反特定的位用^;

    取反所有的位用~;

    参考:

    http://blog.chinaunix.net/uid-25909722-id-2856108.html

  • 相关阅读:
    java的运行机制及初步相关配置(jdk)
    观察者模式
    Shiro的 rememberMe 功能使用指导(为什么rememberMe设置了没作用?)
    MyBatis—实现关联表查询
    Mybatis解决字段名与实体类属性名不相同的冲突
    Mybatis简化sql书写,别名的使用
    十八.模块
    十七.偏函数
    十六.装饰器
    十五.匿名函数
  • 原文地址:https://www.cnblogs.com/52php/p/5675839.html
Copyright © 2011-2022 走看看