CSAPPLAB1——Datalab(下)
前言:本文为CSAPP3.0配套Lab的刷题笔记,这是第一个lab——Datalab的笔记
每个实验题目将采用以下格式来记录
- 题目描述
- 题解和思路
- 解题代码
isLessOrEqual
题目描述
如果x<=y,返回1,否则返回
题解与思路
本来刚开始一看:诶,这简单嘛,让y-x>=0就行了嘛,就想着写个y+x的相反数然后判断它的符号位,然后没想到又是该死的TMin,这该死的按位取反加一仍然为它本身的数字!还有一个原因是如果相减的结果大于Tmax会溢出为负数,也会有错误,所以修改了实现的逻辑
分成两种情况:x和y符号相同和不同时:y为正为真
x和y符号相同时:y-x>0为真
由于溢出只有在x和y异号的时候才会出现,所以这种方法巧妙的规避了溢出的情况
代码
1 | /* |
logicalNeg
题目描述
不使用逻辑非 ‘!’ 实现逻辑非 ‘!’
题解与思路
-
在所有数字中,只有0和Tmin取它的补码相反数后还为它本身,也即
~0+1=0,~Tmin+1=Tmin
而Tmin为0x80000000,符号位为1,所以可以将x取补码的相反数后判断符号位是否为0 -
转换为考虑筛选出
x<0&&x>=1
的数字然后返回0
代码
1 | /* |
今日体重
评论