//不使用第三个变量,交换两个数的值 #include#include int main(void) { //求和法 int a=10, b=9; printf("a=%d,b=%dn", a, b); a = a + b; b = a - b; a = a - b; printf("a=%d,b=%dn", a, b); //求差法 int c, d; c = 10; d = 12; printf("c=%d,d=%dn", 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=%dn", c, d); //任意一个数与任意一个给定的值连续异或两次,值不变。 int a1 = 10, b1 = 9; //1010, 1001 printf("a1=%d,b1=%dn", a1, b1); a1 = a1 ^ b1; //0011 1001 b1 = a1 ^ b1; //0011 1010 a1 = a1 ^ b1; //1001 1010 printf("a1=%d,b1=%dn", a1, b1); //交换地址 int* m, * n; m = (int*)malloc(sizeof(int)); *m = 10; n = (int*)malloc(sizeof(int)); *n = 20; printf("m=%d,n=%dn", *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=%dn", *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); //打印二进制数
}
}



