深入理解:计算机作业1:datalab-handout

本文探讨了如何仅使用位取反(~)和按位与(&)操作符来实现异或(bitXor)功能,通过深入解析代码逻辑,介绍了位运算在实现异或运算中的应用,并提供了详细的解释和相关资源链接。

这个作业还是有难度的,每一个小题相当于一个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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值