《C语言程序设计进阶》7.2.2移位运算

移位

左移<<

  • i << j
    • i中所有的位向左移动j个位置,而右边填入0
  • 所有小于int的类型,移位以int的方式来做,结果是int
  • x <<= 1 等价于 x *= 2
  • x <<= n 等价于 x *= 2^n

右移>>

  • i >> j
    • i中所有的位向右移j
  • 所有小于int的类型,移位以int的方式来做,结果是int
  • 对于unsigned的类型,左边填入0
  • 对于signed的类型,左边填入原来的最高位(换言之,保持符号不变
  • x >>= 1 等价于 x /= 2
  • x >>= n 等价于 x /= 2^n

注意

移位的位数不要用负数,这是没有定义的行为

x << -2     //!!NO!!   

位运算例子

输出一个数的二进制


#include <stdio.h>

int main(int argc, char const *argv[])
{
    int number;                    // int有32位 
    // scanf("%d", &number);
    number = 12;
    unsigned mask = 1u<<31;        // 1u表示1是个unsigned的数 
                                // 1u<<31的结果即10000000 
    for( ; mask; mask >>= 1){
        printf("%d", number & mask ? 1 : 0);
    }
    printf("\n");

    return 0;
}
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2020-2021 zhangguoliu
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信