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

    C的移位位运算符。移位运算符向左或向右移动位。

    1.左移:<<

    左移运算符(<<)将其左侧运算对象每一位的值向左移动其右侧运算对象指定的位数。

    左侧运算对象移出左末端位的值丢失,用0填充空出的位置.

    下面例子中,每一位都向左移动两个位置:
        (10001010)  << 2  //表达式

        (00101000)  << 2  //结果值

    该操作产生了一个新的位值,但是不改变其运算对象。例如,假设stonk为1,那么stonk << 2为4,但是stonk本身不变,仍为1。

    可以使用左移赋值运算符(<<=)来更改变量的值。

    该运算符将变量中的位向左移动其右侧运算对象给定值的位数,如下例:

    int stonk = 1;
    int onkoo;
    onkoo = stonk << 2;  /* 把4赋值给onkoo */
    stonk <<= 2;  /* 把stonk的值改为4 */

    2.右移:>>

     右移运算符,将其左侧运算对象每一位的值向右移动其右侧运算对象指定的位数。

    左侧运算对象移出右末端位的值丢失。

    对于无符号类型,用零填充空出的位置;对于有符号类型,其结果取决于机器。

    空出的位置可用0填充,或者用符号位(即最左端的位)的副本填充:

    (10001010)>> 2    //表达式,有符号值

    (00100010)           //在某些系统中的结果值

    (10001010)>> 2    //表达式,有符号值

    (11100010)           //在另一些系统上的结果值

    下面是无符号值的例子:

    (10001010)>> 2    //表达式,无符号值

    (00100010)           //所有系统都得到该结果值

    每个位向右移动两个位置,空出的位用0填充。

    右移赋值运算符(>>=)其左侧的变量向右移动指定数量的位数,如下所示:

    int sweet = 16;       //二进制值为:0001 0000   
    int ooosw;
    
    ooosw = sweet >> 3;   // 右移三位2进制值W为:0000 0010, 十进制ooosw = 2,sweet的值仍然为16
    sweet >>=3;           //sweet的值为2    ‘>>=’是右移赋值运算符

    3.用法:移位运算符

    移位运算符针对2的幂提供快速有效的乘法和除法:

    number << n      num乘以2的n次幂

    number >> n     如果number为非负,则用number除以2的n次幂

    这些移位运算符,类似于在10进制中,移动小数点来乘以10或除以10。

    移位预算符还可以用于较大单元中提取一些位。例如用一个unsigned long类型的值表示颜色值,低阶位字节存储红色的强度,下一个字节存储绿色的强度,第3个字节存储蓝色的强度。

    随后你希望把每种颜色的强度分别存储在3个不同的类型的变量中,那么可以使用你下面的语句:

    #define BYTE_MASK 0xff
    unsigned long color = 0x002a162f;
    unsigned char blue, green, red;
    red = color & BYTE_MASK;
    green = (color >> 8) & BYTE_MASK;
    blue = (color >> 16) & BYTE_MASK;

    以上代码中使用右移运算符,将8位颜色值移动至低阶字节,然后使用掩码技术把低阶字节赋值给指定的变量。


     

  • 相关阅读:
    一个IT工薪族的4年奋斗成果
    一个IT工薪族的4年奋斗成果
    【VBA】制作散点图及打标签VBA
    【VBA】合并多个excel文件
    【统计分析】ROC曲线
    【ARDUINO】HC-05蓝牙不配对问题
    【ARDUINO】串口无法打开问题
    【ARDUINO】蓝牙(HC-05)透传
    【Raspberry pi+python+mysql】红外传感器-发邮件-存数据库
    【Raspberry Pi】crontab 定时任务
  • 原文地址:https://www.cnblogs.com/LinQingYang/p/12447580.html
Copyright © 2011-2022 走看看