位运算应用

    xiaoxiao2021-03-26  31

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

    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);的应用

    转载请注明原文地址: https://ju.6miu.com/read-661979.html

    最新回复(0)