C语言简单算法

C语言简单算法,第1张

//不使用第三个变量,交换两个数的值
#include 
#include 

int main(void)
{
	//求和法
	int a=10, b=9;
	printf("a=%d,b=%d\n", a, b);
	a = a + b;
	b = a - b;
	a = a - b;
	printf("a=%d,b=%d\n", a, b);

	//求差法
	int c, d;
	c = 10; d = 12;
	printf("c=%d,d=%d\n", c, d);
	c = d - c; //c=2;d=12
	d = d - c; //c=2;d=10
	c = d + c; //c=10;d=10
	printf("c=%d,d=%d\n", c, d);

	//任意一个数与任意一个给定的值连续异或两次,值不变。
	int a1 = 10, b1 = 9;	//1010, 1001
	printf("a1=%d,b1=%d\n", a1, b1);
	a1 = a1 ^ b1;	//0011 1001
	b1 = a1 ^ b1;	//0011 1010 
	a1 = a1 ^ b1;	//1001 1010
	printf("a1=%d,b1=%d\n", a1, b1);

	
	//交换地址
	int* m, * n;
	m = (int*)malloc(sizeof(int));
	*m = 10;
	n = (int*)malloc(sizeof(int));
	*n = 20;
	printf("m=%d,n=%d\n", *m, *n);
	if (m < n)
	{
		m = (int*)(n - m);
		n = (int*)(n - ((int)m & 0x0000ffff));
		m = (int*)(n + ((int)m & 0x0000ffff));
	}
	else
	{	
		n = (int*)(m - n);
		m = (int*)(m - ((int)n & 0x0000ffff));
		n = (int*)(m + ((int)n & 0x0000ffff));
	}
	printf("m=%d,n=%d\n", *m, *n);
}

十进制转2进制

void print_bin(int n)
{
	int l = sizeof(n)*8;//总位数。
	int i;
	for (i = l - 1; i >= 0; i--)//略去高位0.
	{
		if ((n & (1 << i))!=0) break;	//取前面的位,判断是否为0,为0继续判断,为1停止判断,i为n的二进制总长度
	}
	for (; i >= 0; i--)
	{
		printf("%d", (n & (1 << i)) != 0);	//打印二进制数
	}
}

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/867144.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-12
下一篇2022-05-12

发表评论

登录后才能评论

评论列表(0条)

    保存