这个作业还是有难度的,每一个小题相当于一个LeetCode题目,大部分自己是没想出来,除了部分上课讲过的。
第一小题:取反,与操作,来实现异或功能
- bitXor - 仅允许使用~和&来实现异或
- 例子: bitXor(4, 5) = 1
- 允许的操作符: ~ &
- 最多操作符数目: 14
- 分值: 1
这个需要使用一个数电里面的基本知识,异或等于取反的组合。

知乎:理解异或
int logicalNeg(int x) {
return ((x>>31)^1)&(((x^(~x+1))>>31)^0xffffffff)&1;
}
这里如果x是一个负数,那么((x>>31)^1就是false,就会短路,不在往后面执行,返回0。
如果x是一个正数,那么((x>>31)^1就是一个true,所以就会往后面执行。~x+1这个是求补码的操作,对于正数来讲,补码就是自己。x^ x等到的就是0,0^ 0xfffffff就是0xffffffff,最后&1就会等到1,放回true;
参考链接:
https://zhuanlan.zhihu.com/p/59534845?utm_source=qq
http://hh-yzm.com/index.php/archives/6/#
https://blog.youkuaiyun.com/weixin_42062229/article/details/93496909
https://blog.youkuaiyun.com/qq_40889820/article/details/88831962
https://blog.youkuaiyun.com/qq_40851744/article/details/103163205
https://blog.youkuaiyun.com/lzjsqn/article/details/61431048
https://blog.youkuaiyun.com/qq_36840162/article/details/78123072
https://blog.youkuaiyun.com/blackturtle/article/details/70177180
本文探讨了如何仅使用位取反(~)和按位与(&)操作符来实现异或(bitXor)功能,通过深入解析代码逻辑,介绍了位运算在实现异或运算中的应用,并提供了详细的解释和相关资源链接。
2413

被折叠的 条评论
为什么被折叠?



