[C语言]ASSERT与CONST函数使用,移位操作符求二进制不同位数,打印二进制数奇数位和偶数位

ASSERT与CONST函数使用

assert函数为断言函数,当满足一定条件的时候起警示的作用,用来帮助判断程序是否出现问题,const函数的更多的作用是防止程序出现bug或者防止程序按照错误方向进行,比如要复制一个字符串给另外一个,我们来看看这两个函数的作用是怎么样的

//手工实现strcpy函数
#include <stdio.h>
#include <assert.h>
char* my_strcpy(char* x,const char* y)
{
	assert(x != NULL);
	assert(y != NULL);
	char* ret = x;
	while (*x++ = *y++)
	{
		;
	}
	return ret;
}


int main()
{
	char a[] = { "xxxxxxx" };
	char b[] = { "strcpy" };
	printf("%s", my_strcpy(a, b));
	return 0;
}

其中assert在此段代码的作用是防止数组里面传递的参数为空值,const防止要赋值的参数和赋值的参数前后顺序搞反

移位操作符求二进制不同位数

通过右移位操作符与自己输入的数进行对比,我们可以得到我们输入数字对应不同的位数,有两种方法,一种是逐次位与,当然这种方法明显不够效率高,我们选用的方法是先对两个数进行异或,再对其数字中含1的多少进行计算得出结果

//求两个数二进制不同的位数
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int bit_diff_count(int a, int b)
{
	int count = 0;
	int c = a ^ b;
	int i;
	for (i = 1; i < 32; i++)
	{
		c >> i;
		if (c % 2 != 0)
		{
			count++;
		}
	}
	return count;
}

int main()
{
	int a;
	int b;
	scanf("%d", &a);
	scanf("%d", &b);
	printf("位数不同的个数为:%d\n",bit_diff_count(a, b));
}	

打印二进制数奇数位和偶数位

打印奇数位和偶数位可以写两个循环,让其内的循环数每次都加2即可,这里我们采用的方法是对其奇数位偶数位为1的位赋值给一个新的变量,然后再逐次打印,代码如下:

//打印二进制的奇数位和偶数位
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>

void print_bit(int x)
{
	int i;
	for (i = 31; i>=0; i--)
	{
		printf("%d",(x >> i) % 2);
	}
	printf("\n");

}

int main()
{
	int a;
	scanf("%d", &a);
	int odd = 0;
	int even = 0;
	int i;
	for (i = 0; pow(2, i) < a; i++)
	{
		if ((i+1) % 2 == 1)//奇数情况
		{
			odd = odd + ((a >> i) % 2) * pow(2, i);
		}
		else//偶数情况
		{
			even = even + ((a >> i) % 2) * pow(2, i);
		}
	}
	print_bit(a);
	print_bit(odd);
	print_bit(even);
	return 0;
}

  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值