1.不能创建临时变量(第三个变量),实现两个数的交换。
//^: 0^a=a; a^a=0;a^b^a=b
int main()
{
int a = 6;
int b = -7;
printf("交换前:a=%d b=%d\n", a, b);
a = a ^ b;//a=6^-7
b = a ^ b;//b=6^-7^-7=6
a = a ^ b;//a=6^-7^6=-7
printf("交换后:a=%d b=%d\n", a, b);
return 0;
}
2.编写代码实现:求一个整数存储在内存中的二进制中1的个数
int main()
{
int a = 10;
int k = 0;
for (int i = 0; i < 32; i++)
{
int b = a & 1;
a >>= 1;
if ( b == 1 )
k++;
}
printf("%d\n", k);
return 0;
}
3.一个整数存储在内存中的二进制序列中的某一位改变
int main()
{
int b = 0;
int c = 0;
int a = 10;//00000000000000000000000000001010 --10的补码
//右数第三位改为1
b = a | (1 << 2);
//右数第四位改为0
c = a & (~(1 << 3));
printf("%d %d\n", b, c);
return 0;
}
4.求(1)(2)(3)(4)的输出值
#include <stdio.h>
void test1(int arr[])
{
printf("%d\n", sizeof(arr));//(2)
}
void test2(char ch[])
{
printf("%d\n", sizeof(ch));//(4)
}
int main()
{
int arr[10] = { 0 };
char ch[10] = { 0 };
printf("%d\n", sizeof(arr));//(1)
printf("%d\n", sizeof(ch));//(3)
test1(arr);
test2(ch);
return 0;
}
5.求i,a,b,c,d值
int main()
{
int i = 0, a = 0, b = 2, c = 3, d = 4;
i = a++ && ++b && d++;//a++先使用,则为假,&&表达式整体为假后面就不用计算了
printf(" i=%d\n a=%d\n b=%d\n c=%d\n d=%d\n", i, a, b, c, d);//0 1 2 3 4
return 0;
}
int main()
{
int i = 0, a = 1, b = 2, c = 3, d = 4;
i = a++||++b||d++;//a++先使用,则为真,||表达式整体为真,后面就不用计算了
printf(" i=%d\n a=%d\n b=%d\n c=%d\n d=%d\n", i, a, b, c, d);//1 2 2 3 4
return 0;
}