内容会不断更新。
配置过程是下载清华大学打包好的镜像,用虚拟机运行Ubuntu,再开启共享文件夹进行使用。
问题1:bitXOR
用~和&实现异或。思路是输入为0011和0101,输出为0110即可。(真值表的二进制化)
先使用一至两次~和&组合出0100和0010,但由于没有|也没有+,转而通过先~再&再~,转化为其反面来实现这一功能。
最终为return ~(~(~A&B)&(~(A&(~B))));
问题2:tmin
直接通过左移位完成即可。(也许可以开挂写-2147483648?)
最终为return 1<<31;
问题3:isTmax
注意到Tmax的显著特点是即将溢出,溢出后位表示完全变化。故有性质x^(x+1)==0
但同样的,-1也有这一性质,因为截断也会使位表示完全变化。还需加入限定条件x+1 != 0
在这个问题中,对所有其他条件返回一个相同值时,!的价值就体现了出来。可惜始终表示否定,有时当满足不适用条件时表达式值为零,则不得不使用两层嵌套。
最终为return !(~(x^(x+1)))&(!(!(x+1));
未完待续。