1.假设一个 int 型变量 a ,要把 a 的 bit5 变为 0 ,其它位不变,怎么做?
a = a & (~(1 << 5));
2.假设一个 int 型变量 a ,要把 a 的 bit6 变为 1 ,其它位不变,怎么做?
a = a | (1 << 6);
3.假设一个 int 型变量 a ,要把 a 的 bitn(0~31) 变为 1 ,其它位不变,怎么做?
a = a | (1 << n)
4.假设一个 int 型变量 a ,要把 a 的 bitn(0~31) 变为 0 ,其它位不变,怎么做?
a = a & (~(1 << n))
5.顺序求解,结果为最后一个表达式的值,并且优先级最低。
a=(3+4, 5*6, 2+1); //a = 3;
a=3*3, a+6, a+7; // 16 ,a =9
(a=3*5, a*4), a+5 //20 a = 15
6、将 x(int) 中 bitm 开始的连续 n个 bit 取反,其余保持不变
x(做之前):
xxxxx....XXXXXX....xxxxx
x(做之后):
xxxxx....~X~X~X~X~X~X....xxxxx
解答:
x ^ 1 = ~ x;
x = (((1<<n) - 1) << m ) ^ x;
7、将 x(int) 中 bitm 开始的连续 n 个 bit 设置为 y(int) 中最右边 n 个bit,其它位不变
x(做之前):
xxxxx....XXXXXX....xxxxxx
y:
yyyyy..............YYYYYY
x(做之后):
xxxxx....YYYYYY....xxxxxx
解答:
1)把x的 bitm 开始的连续 n 个 bit 清零
2)提取y(int) 中最右边 n 个bit
3)把y 的n个bit为插入到x中
假设 n = 4, m = 1
1)x清零: x = x & (~ (((1 << n) - 1) << m));
0001 0000
0000 1111
0001 1110
1110 0001
2)提取y(int):y = y & ((1<<n)-1);
0001 0000
0000 1111
3)插入 x = x | (y << m);
x = x & (~ (((1 << n) - 1) << m));
y = y & ((1<<n)-1);
x = x | (y << m);
/*
总结;
1.看考察的是哪个知识点
2.要有算法知道怎么搞
3.一步一步的一出来
*/