New Code day6
1.写一个函数返回参数二进制中 1 的个数
比如: 15 0000 1111 4 个 1
程序原型:
int count_one_bits(unsigned int value)
{
// 返回 1的位数
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int Count(int value)
{
int i = 1;
int count = 0;
for(i=1; i!=0; i <<= 1)
{
if((value&1) == 1)
{
count++;
}
value >>= 1;
}
return count;
}
int main()
{
int input = 0;
int ret = 0;
printf("要判断的数>:");
scanf("%d",&input);
ret = Count(input);
printf("%d的二进制位中1的个数为%d\n",input,ret);
return 0;
}
// 详细方法 https://blog.csdn.net/quchen528/article/details/83244344
2.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
void Stst(int const input,int* arr)
{
int i = 0;
int count = 0;
int tmp = input;
for(i=0; tmp!=0; i++)
{
arr[i] = tmp%2;
tmp /= 2;
count = i+1;
}
for(; count<32; count++)
{
arr[count] = 0;
}
printf("转换后的二进制奇数位为>:");
for(i=31; i>0; i-=2)
{
printf("%d ",arr[i]);
}
printf("\n");
printf("转换后的二进制偶数位为>:");
for(i=30; i>=0; i-=2)
{
printf("%d ",arr[i]);
}
}
int main()
{
int arr[32] = {0};
int input = 0;
printf("请输入十进制数>:");
scanf("%d",&input);
Stst(input,arr);
return 0;
}
3. 输出一个整数的每一位。
void Stst1(int const input, int* arr)
{
int i = 0;
int count = 0;
int tmp = input;
if(tmp > 0)
{
for(i=0; tmp!=0; i++)
{
arr[i] = tmp%2;
tmp /= 2;
count = i+1;
}
for(; count<32; count++)
{
arr[count] = 0;
}
printf("%d转换成二进制的32位为: ",input);
for(i=31; i>=0; i--)
{
printf("%d ",arr[i]);
}
}
else if(tmp == 0)
{
printf("%d转换成二进制的32位为: ",input);
i = 32;
while(i)
{
printf("0 ");
i--;
}
printf("\n");
}
else
{
tmp *= (-1);
for(i=0; tmp!=0; i++)
{
arr[i] = tmp%2;
tmp /= 2;
count = i+1;
}
for(; count<32; count++)
{
arr[count] = 0;
}
printf("%d转换成二进制的32位为: ",input);
printf("1 ");
for(i=30; i>=0; i--)
{
printf("%d ",arr[i]);
}
printf("\n");
}
}
int main()
{
int arr[32] = {0};
int input = 0;
printf("请输入十进制非负数数>:");
scanf("%d",&input);
Stst1(input,arr);
return 0;
}
4.编程实现:
两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
void Bit(int m,int n)
{
int a = m;
int b = n;
int i = 32;
int count = 0;
if((m>=0 &&n <0) || (m<0 && n>=0))
{
if(m<0)
m *= (-1);
else if(n<0)
n *= (-1);
count++;
i--;
while(i)
{
if((m&1) != (n&1))
count++;
m >>= 1;
n >>= 1;
i--;
}
}
else if(m<0 && n<0)
{
m *= (-1);
n *= (-1);
}
else
{
while(i)
{
i--;
if((m&1) != (n&1))
count++;
m >>= 1;
n >>= 1;
}
}
printf("%d与%d二进制位中不同的个数为>:%d\n",a,b,count);
}
int main()
{
int m = 0;
int n = 0;
printf("要比较的两个整数>:",m,n);
scanf("%d%d",&m,&n);
Bit(m,n);
return 0;
}