#include<stdio.h>
#include<stdlib.h>
#include<math.h>
//与1对应的二进制进行比较,&逻辑与,相同num加1
//右移1位,再次比较
//最终得到的num值为所求二进制数中1的个数
int Fun(int n)
{
int num = 0;
while(n)
{
num += n & 1;
n = n >> 1;
}
return num;
}
int main()
{
int n;
printf("Please enter a number: ");
scanf("%d", &n);
getchar();
printf("%d\n", Fun(n));
getchar();
return 0;
}
int Fun1(int n)//去掉最后一位
{
return n >> 1;
}
int Fun2(int n)//在最后加一个0
{
return n << 1;
}
int Fun3(int n)//在最后加一个1
{
int num = n << 1;
return num | 1;
}
int Fun4(int n)//把最后一位变成1
{
int num = n | 1;
return num;
}
int Fun5(int n)//把最后一位变成0
{
int num = n | 1;
return num-1;
}
int Fun6(int n)//最后一位取反
{
int num1 = ~0 - 1;
int num2 = n & num1;
n = ~n & 1;
return n+num2;
}
int Fun7(int n, int k)//把右数第k位变成1
{
k = pow((double)2, k-1);
n = n | k;
return n;
}
int Fun8(int n, int k)//把右数第k位变成0
{
k = pow((double)2, k-1);
int num = ~(0 | k);
return n#
}
int Fun9(int n, int k)//右数第k位取反
{
k = pow((double)2, k-1);
n = n ^ k;
return n;
}
int Fun10(int n, int k)//取末三位//取末k位
{
int num = 0;
while(k >= 0)
{
num += pow((double)2, k-1);
k--;
}
return n#
}
void Fun12(int n, int k)//取右数第k位
{
k = pow((double)2, k-1);
n = n&k;
if(n == 0)
{
printf("0\n");
}//k位为0
else
{
printf("1\n");
}//k位为1
}
int Fun13(int n)//把右数连续的1变成0
{
int num = n;
int num1;
int flag = 0;//标记位(0为连续,1为不连续)
int k = 0;
while(num != 0)
{
num1 = num % 2;
num = num / 2;
if(num1== 1 && num%2 == 1 && flag == 0)
{
k++;
}
else
{
flag = 1;
}
}
int num2 = 0;
while(k >= 0)
{
num2 += pow((double)2, k);
k--;
}
return n^num2;
}
int Fun14(int n)//把右边第一个0变成1
{
int num = n;
int k = 0;
int flag = 0;
while(num != 0 && flag == 0)
{
if(num % 2 == 1)
{
k++;
}
else
{
k++;
flag = 1;
}
num = num / 2;
}
num = pow((double)2, k-1);
return n|num;
}
int Fun15(int n)//把右边连续的0变成1
{
int num = n;
int num1;
int num2 = 0;//标记位(0为连续,1为不连续)
int k = 0;
while(num != 0)
{
num1 = num % 2;
num = num / 2;
if(num1== 0 && num%2 == 0 && num2 == 0)
{
k++;
}
else
{
num2 = 1;
}
}
int num3 = 0;
while(k >= 0)
{
num3 += pow((double)2, k);
k--;
}
return n|num3;
}
void itoa_n(int n)//十进制数转二进制数
{
char str[30];
itoa(n, str, 2);
printf("%s\n", str);
}
int main()
{
unsigned int n;
printf("Please enter a number: ");
scanf("%d", &n);
getchar();
//itoa_n(Fun1(n));
//itoa_n(Fun2(n));
//itoa_n(Fun3(n));
//itoa_n(Fun4(n));
//itoa_n(Fun5(n));
//itoa_n(Fun6(n));
//itoa_n(Fun7(n, 3));
//itoa_n(Fun8(n, 3));
//itoa_n(Fun9(n, 3));
//itoa_n(Fun10(n, 3));
//Fun12(n, 3);
//itoa_n(Fun13(n));
itoa_n(Fun14(n));
//itoa_n(Fun15(n));
getchar();
return 0;
}
位操作应用示例
猜你喜欢
转载自blog.csdn.net/qq_39191122/article/details/80043087
今日推荐
周排行