位操作之创建掩码实现二进制转换
位操作之创建掩码实现二进制转换
位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算
例如:
int i = 1;
i = i << 2; //把i里的值左移2位
- 也就是说1的2进制是000…0001
这里1前面0的个数和int的位数有关,32位机器,gcc里有31个0
- 左移2位之后变成 000… 0100,也就是10进制的4
- 所以说左移1位相当于乘以2
- 那么左移n位就是乘以2的
n
次方了
/** @Author: Your name* @Date: 2020-03-06 21:35:52* @Last Modified by: Your name* @Last Modified time: 2020-03-06 21:43:06*/
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>
char *convert(int n,char *string);
void showall(char *string1);
int showbitinverse(int num,int n);
int main()
{char BIT[CHAR_BIT * sizeof(int) + 1];int num;puts("Please enter one integer to continue.");while(scanf("%d",&num)==1){convert(num,BIT);showall(BIT);putchar('\n');num = showbitinverse(num,4);puts("Here are the inverse interge.");showall(convert(num,BIT));puts("\n");}puts("Bye.");return 0;
}
char *convert(int n,char *string)
{const static int SIZE = CHAR_BIT * sizeof(int);int i;for(i = SIZE- 1;i>=0;i--,n>>=1){string[i] = (01&n) + '0';//取出n的某一位}string[SIZE] = '\0';//注意是带斜杠,表示结束return string;
}
void showall(char *string1)
{int i = 0;while(string1[i]){putchar(string1[i]);if(++i % 4==0 &&string1[i]){putchar(' ');}}
}
int showbitinverse(int num,int n)
{int MASK = 0;int bitval = 1;while(n--){MASK |=bitval;bitval<<=1; }return num^MASK;
}
结果如下:
发布评论