位运算应用

来源:互联网 发布:汇通网财经日历 数据 编辑:程序博客网 时间:2024/06/06 07:49

位操作运算符的应用


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
  • 2
  • 3
  • 1
  • 2
  • 3

编程题:

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;}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

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;}
0 0
原创粉丝点击