位操作运算符

位操作运算符的应用

&
1.对特定位清0
mask中的特定位为0,其余位为1。s = s & mask;

2.取某数中的指定位
mask特定位置1,其余位0。

|
常用来将源操作数某些位置1,其余位不变
mask特定位置为1,其余位为0。

^
1.使特定位取反
mask特定位置1,其余位为0;
2.不引用第三方变量,交换值

a = a ^ b;
b = a ^ b;
a = a ^ b;

编程题:

1.从键盘输入一个数,输出这个数的32位二进制。
源码如下:

#include <stdio.h>

void int_to_32bit(unsigned int num)
{
    int i;

    unsigned int mask = 0x80000000;

    for(i = 0; i < 32; i++)
    {
        if((num & mask) == mask)
        {
            printf("1");
        }
        else 
        {
            printf("0");
        }
        num = num << 1;

        if((i + 1) % 4 == 0)
        {
            printf(" ");
        }
    }

    printf("\n");
}

int main()
{
    unsigned int num;

    printf("Please input a num:\n");
    scanf("%u",&num);

    int_to_32bit(mask);

    return 0;
}

2.从键盘输入一个十进制数,转化为十六进制数输出。

#include <stdio.h>

void ten2sixteen(unsigned int num,char *p)
{
    int i;
    unsigned int mask = 15;
    unsigned int temp;

    *p = '0';
    *(p + 1) = 'x';
    *(p + 10) = '\0';

    for(i = 0; i < 8; i++)
    {
        temp = num & mask;
        if(temp > 9)
        {
            p[9 - i] = temp - 10 + 'a';
        }
        else
        {
            *(p + (9 - i)) = temp + '0';
        }
        num = num >> 4;
    }
}

int main()
{
    unsigned int num;
    char hex[12]={0};

    printf("Please input a number:\n");
    scanf("%u",&num);

    ten2sixteen(num,hex);

    printf("The changed num is:\n%s\n",hex);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/pencher_liu/article/details/53731121
今日推荐