C语言移位运算符

移位运算是将数据看成二进制数,对其进行向左或右移动若干位的运算。移位运算包括左移位运算和右移位运算。

移位运算符

移位运算符包括左移位运算符和右移位运算符,都是双目运算符,有两个运算对象。第一个运算对象是要移位的运算对象,第二个运算对象是所移的二进制位数。移位运算符的表示形式、举例和功能如表所示。

C语言移位运算符

移位运算符总结如下:

  • 左移运算符是将一个数的二进位全部左移若干位。“<<”左边的数是要移位的数,右边的数指定移动的位数。

    左移的规则是将二进制数向左移动若干位,左边移走的高位被丢弃,右边被空出来的低位补零。移位运算符的操作对象为整型,有无符号数和带符号数之分,但对于左移运算来说,若高位左移后溢出,则舍弃,低位补0。例如:a=a<<2,将a的二进制数左移2位,右补0。若a=13,即二进制数00001101,则
    C语言移位运算符
    最后a=52。

  • 右移运算符是将一个数的二进位全部右移若干位。“>>”左边的数是要移位的数,右边的数指定移动的位数。

    右移的规则是将二进制数向右移动若干位,右移与被移位的数据是否带符号有关。对于无符号整数来讲,左端空出的高位全部补0。而对于有符号的数来讲,如果符号位为0(即正数),则被空出来的高位部分补零。如果符号位为1(即负数),则被空来的高位部分补0还是补1,与使用的计算机系统有关,有的计算机系统补0,有的计算机系统补1。例如:a=a>>2,将a的二进制数右移2位,左补0。若a=13,即二进制数00001101,则
    C语言移位运算符
    最后a=3。

    若a=-15,即计算机内的二进制表示为11110001,则
    C语言移位运算符

    最后a=-4。11111100是-4在计算机内以其二进制补码的表示形式(这个结果是使用Visual C++ 6.0环境运行的结果)。

移位运算的优先级

如果在一个式子中出现多种运算符,要按照运算符的优先级顺序进行运算,移位运算符在位运算符中的优先顺序如图所示:

C语言移位运算符

移位运算符与前面学习过的几种运算符混合使用时的运算优先顺序如图所示。

C语言移位运算符

赞(1)

评论 抢沙发

评论前必须登录!