
//不使用第三个变量,交换两个数的值
#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); //打印二进制数
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)