C的位操作

一、位的概念
我们知道,在计算机中,一字节占8位(现在的某些电脑也有占16位的),这样表示的数的范围为0-255,也即00000000-11111111。位就是里面的0和1。
        char c=100;
    实际上c应该是01100100,正好是64H。其中高位在前,低位在后。
                      |
               第7位  第0位


二、位逻辑运算符

        符号         描述
                   位逻辑与
                   位逻辑或
                   位逻辑异或
                   取反
    表中除去最后一个运算符是单目运算符,其他都是双目运算符。这些运算符只能用于整型表达式。位逻辑运算符通常用于对整型变量进行位的设置、清零、取反、以及对某些选定的位进行检测。在程序中一般被程序员用来作为开关标志。较低层次的硬件设备驱动程序,经常需要对输入输出设备进行位操作。 

         运算的规则是当两个位都为1时,结果为1,否则为0;
         运算的规则是当两个位都为0时,结果为0,否则为1;
         运算的规则是当两个位相同时,结果为0,否则为1;
         运算的规则是当为1时结果为0,当为0时,结果为1。

    设置位:设置某位为1,而其他位保持不变,可以使用位逻辑或运算。
        char c;
        c=c|0x40;
    这样不论c原先是多少,和01000000或以后,总能使第6位为1,而其他位不变。

    清除位:设置某位为0,而其他位保持不变。可以使用位逻辑与运算。
        c=c&0xBF;
    这样c和10111111与以后,总能使第6位为0,其他位保持不变。
    那如果想让某位为1,其他位都为0怎么办呢?

三、位移运算符
         符号             描述
          <<              左移
          >>              右移

    位移运算符作用于其左侧的变量,其右侧的表达式的值就是移动的位数,运算结果就是移动后的变量结果。
        b=a<<2;
    就是a的值左移两位并赋值为b。a本身的值并没有改变。
                
    向左移位就是在低位补0,向右移位就是在高位上补0。右移时可以保持结果的符号位,也就是右移时,如果最高位为1,是符号位,则补1而不是补0。
    程序员常常对右移运算符来实现整数除法运算,对左移运算符来实现整数乘法运算。其中用来实现乘法和除法的因子必须是2的幂次。

    举例:输入一个整数,判断这个数中有几个二进制位1?例如输入67,输出结果应该为3。因为67的相应二进制数为00000000 01000011(0043H),有3个1出现。
    分析:要判断是不是1,只需要判断该位与1与以后是不是1就可以知道。一个整数,判断16次即可。

        main()
        {
            int num,k;
            int count=0;               
            scanf("%d",&num);
            for(k=0;k<16;k++)
            {
                if(num&1==1) count++;    
                num>>=1;                 
            }
            printf("%d/n",count);
        }

    这样每次都判断最低位是不是1,判断完以后,让前面的右移一位即可。
    对位的操作,一般程序中用的不多,但是在对计算机硬件操作时,肯定会涉及到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值