位操作运算符的应用
&
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;
}
- 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;
}