位运算应用

位运算(针对整型、字符型,计算机会将它转换为二进制运算)

1、按位与:x&y  对应位都为1时才为1

    用途:取、保留1个数的某位(对应掩码的对应位为1),其余各位置1

2、按位或:x|y 对应位都为0才为0,否则为1

    用途:将1个数的某些位置1,其余不变

3、按位异或:x^y  对应位相同为0,不同为1

    用途:使1个数某些位取反

4、按位取反:~x  

    用途:间接构造一个数,增强可移植性

5、按位左移:x<<  各位左移,低位补0,高位溢出

6、按位左移:x>>  各位右移,移出的低位舍弃

    高位:(1)对无符号数和有符号中的正数补0

                (2)有符号的负数,取决于系统,补0的称为“逻辑右移”,补1的称为“算术右移”

程序应用:

1、请编写一个c函数,该函数给出一个字节中被置为1的位的个数

#include <stdio.h>

int main()
{
    int i,mask;
char ch;

int len=0;

printf("Enter a character: ");
scanf("%c",&ch);

mask = 1 <<7;
printf("%c=",ch);

for(i = 1;i <= 8;i++)
    {
        putchar(ch & mask ? '1' : '0');
        if(ch & mask ? '1' : '0' == '1')
{
len++;
}
ch <<= 1;
if(i  == 4)
   putchar(',');
}
printf("\n");

printf("%d\n",len);
    return 0;
}

注意:mask = 1 <<7; putchar(ch & mask ? '1' : '0');ch <<= 1;的应用


2、输入一个整数a,再输入两个整数p1,p2(p1,p2<32),输出该整数的二进制表示方法中从右端开始的p1到p2位.

#include <stdio.h>

int main()
{
int a,p1,p2;
    int mask;
int i;

    printf("Enter a interger: a=");
    scanf("%d",&a);
printf("Enter two intergers(p1<p2<32): ");
scanf("%d%d",&p1,&p2);

printf("new_a=");
    mask = ~(~0 << p1);
    
for(i = p1;i <= p2;i++)
{
        putchar(a & mask ? '1' : '0');
a >>= 1;
if(i % 4 == 0)
putchar(',');
}
    printf("\n");

    return 0;
}

注意:mask = ~(~0 << p1);的应用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值