
面试题
ll_0802
这个作者很懒,什么都没留下…
展开
-
计算x转化成二进制包含1的数量
//func返回值是x转化成二进制后包含1的数量#include using namespace std;int func(int x) { int count = 0; while (x) { ++count; x = x&(x-1); } return count;}int main() { cout << fu原创 2016-02-19 20:00:25 · 435 阅读 · 0 评论 -
printf从右往左运算
#include void main() { int b = 3; int arr[] = {6, 7, 8, 9, 10}; int *ptr = arr; *(ptr++) += 123; printf("%d %d", *ptr, *(++ptr));}最后的输出结果是8,8而不是7,8原创 2016-02-19 20:20:24 · 638 阅读 · 0 评论 -
位运算求平均值,防止溢出
代码段如下:int f(int x, int y) { return (x&y)+((x^y)>>1);}二进制数由0,1表示。x和y转换为二进制后,位对应可能有三种形式:分别是1和1对应,1和0对应,0和0对应。因此求平均值也可分成这三种对应情形讨论,然后求和。1.1和1对应的部分,平均值就是x&y2.0和0对应的部分,平均值为03.1和0对应的部分,平均值是(x^原创 2016-02-20 11:22:49 · 916 阅读 · 1 评论 -
a,b交换与比较
1.有两个变量a、b,不用判断语句,找出其中较大的数int max = ((a + b) + abs(a - b)) / 22.将a,b交换,不用任何中间变量方法一:加减法(可能会溢出)a = a + b;b = a - b;a = a - b;方法二:乘除法(可能溢出,b不为0)a = a * b;b = a / b;a = a /b;方法三:异或法原创 2016-02-20 14:53:15 · 408 阅读 · 0 评论 -
基本语句的综合运用
int CallScore(int N, int *Score, int *Judge_type) { int ret, m, n; //m和n分别是大众评委和专家评委的人数 ret = m = n = 0; double sum1 = 0, sum2 = 0; //sum1和sum2分别代表大众评委和专家评委的分数 if (N && Score && Judge_原创 2016-02-20 15:31:08 · 343 阅读 · 0 评论