C语言中的 “>>”与“<<”


1. “>>”

int x = 16; printf("%d\n", x >> 1);
先将x转成二进制 10000, 不读最后一位, 输出 1000, 即为8;
右移一位相当于数值除以2

2. “<<”

int x = 16; printf("%d\n", x << 1);
先将x转成二进制 10000, 往最后再读取一位(0, 或根据是否已经有移位), 输出 100000, 即为32;
左移,若移动位数K等于或大于数据长度N,通常只移动K mod N 位数
左移一位相当于数值乘以2

3.注意

以上不包含溢出情况, 且只有能用在int、short int、long int,可能有错漏。
溢出判断:

  • 正溢出:正数相加,结果为负数
  • 负溢出:负数相加,结果为正数

4.结论

c语言中"<<"与">>" 被称为整数的位移运算,位移是以“位(bit简写为b)”为单位将数据向左或向右的移动。 (8b = 1B)

5.测试

#include <stdio.h>

int main()
{
    int x = 16;
    printf("%d\n", x >> 3);
    printf("%d\n", x >> 2);
    printf("%d\n", x >> 1);

    printf("%d\n", x << 3);
    printf("%d\n", x << 2);
    printf("%d\n", x << 1);
}

结果为

2
4
8
128
64
32


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM