第 1 题(单选题)
题目名称:
下面哪个是位操作符:( )
题目内容:
A .&
B .&&
C .||
D .!
A. & 是按位与操作符,正确
B. && 是逻辑与,不是按位与,错误
C. || 是逻辑或,错误
D. ! 是逻辑反操作符,错误
第 2 题(单选题)
题目名称:
下面代码的结果是:( )
#include <stdio.h>
int main()
{
int a, b, c;
a = 5;
c = ++a;
b = ++c, c++, ++a, a++;
b += a++ + c;
printf("a = %d b = %d c = %d\n:", a, b, c);
return 0;
}
题目内容:
A .a = 8 b = 23 c = 8
B .a = 9 b= 23 c = 8
C .a = 9 b = 25 c = 8
D .a = 9 b = 24 c = 8
第 3 题(编程题)
题目名称:
求两个数二进制中不同位的个数
题目内容:
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?
输入例子:
1999 2299
输出例子:7
//1.
//int diff_bit(int m, int n)
//{
// int count = 0;
// int i = 0;
// for (i = 0; i < 32; i++)
// {
// if (((m >> i) & 1) != ((n >> i) & 1))
// {
// count++;
// }
// }
//
// return count;
//}
//2.
int diff_bit(int m, int n)
{
int count = 0;
int ret = m ^ n;
while (ret)
{
ret = ret & (ret - 1);
count++;
}
return count;
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
int ret = diff_bit(m, n);
printf("%d\n", ret);
return 0;
}
第 4 题(编程题)
题目名称:
打印整数二进制的奇数位和偶数位
题目内容:
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
/*
思路:
1. 提取所有的奇数位,如果该位是1,输出1,是0则输出0
2. 以同样的方式提取偶数位置
检测num中某一位是0还是1的方式:
1. 将num向右移动i位
2. 将移完位之后的结果与1按位与,如果:
结果是0,则第i个比特位是0
结果是非0,则第i个比特位是1
*/
int main() {
int num = 0;
scanf("%d", &num);
printf("奇数位:");
for (int i = 31; i >= 1; i -= 2) {
printf("%d ", (num >> i) & 1);
}
printf("\n");
printf("偶数位:");
for (int i = 30; i >= 0; i -= 2) {
printf("%d ", (num >> i) & 1);
}
printf("\n");
return 0;
}
第 5 题(编程题)
题目名称:
统计二进制中1的个数
题目内容:
写一个函数返回参数二进制中 1 的个数。
比如: 15 0000 1111 4 个 1
//1.
//int count_num_01(int num)
//{
// int count = 0;
// int i = 0;
// for (i = 0; i < 32; i++)
// {
// //每次左移,判断是否为1
// if (num & (1 << i))
// count++;
// }
// return count;
//}
//2.
//int count_num_01(int num)
//{
// int count = 0;
//
// int i = 0;
// for (i = 0; i < 32; i++)
// {
// if (((num >> i) & 1) == 1)
// {
// count++;
// }
// }
//
// return count;
//}
//3.
int count_num_01(int num)
{
int count = 0;
while (num)
{
num = num & (num - 1);
count++;
}
return count;
}
int main()
{
int num = 10; //00000000 00000000 00000000 00001010
int n = count_num_01(num);
printf("二进制中1的个数 = %d\n", n);
return 0;
}
第 6 题(编程题)
题目名称:
交换两个变量(不创建临时变量)
题目内容:
不允许创建临时变量,交换两个整数的内容
int main()
{
int a = 10;
int b = 20;
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);
return 0;
}