位操作

本文介绍了位逻辑运算符和位移运算符的功能及其在实际编程中的应用,包括清零、设置位、数值转换等技巧,并通过示例展示了如何利用位运算来判断整数中二进制位1的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

位逻辑运算符

        
符号         描述
         &           
位逻辑与
         |           
位逻辑或
         ^           
位逻辑异或
         ~           
取补


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

 

他们的功能不用讲大家都知道,看看他们一般都用来干什么:

各位算的特殊用法:

 

   (1)&”:清零;取一个数中某些指定的位。

 

   (2)^”使特点位翻转;与0^保留原值;交换两个值,不用临时变量。

 

   (3)<<”有时相当于乘法。

 

   (4)>>”有时相当于除法。

 

例如:

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

清除位:设置某位为0,而其他位保持不变。可以使用位逻辑与运算。
        c=c&0xBF;
       
这样c10111111与以后,总能使第6位为0,其他位保持不变。

 

向左移位就是在低位上补0,向右移位就是在高位上补0。右移时可以保持结果的符号位,也就是右移时,如果最高位为1,是符号位,则补1而不是补0

 

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值