inty){//符号位ints1=x>>31;ints2=y>>31;//s1 == s2 ? 1 : 0intmask=!(s1^s2);// y - xintdiff=y+(~x)+1;// y - x >= 0 ? 1 : 0intflag2=!(diff>>31);return(mask&flag2)|((!mask)&(s1&1));}
求浮点数的平方,这个真没怎么看懂,而且样例给的比较大,我这surface book1的cpu只能./btest -T 20,把时间限制改20秒才能跑过。 虽然有些地方还不是很清楚,但是确实收获满满,使用位运算实现一些比较基础的函数后感觉对这一章的内容理解更深刻了一些,接下来就是bomblab啦 ...
比如1010 1010就是奇数位上全1. 所以只要和1010 1010做&操作,只要做完以后还是1010 1010的话,那么就返回1,不然就是0. 因为假设 x 奇数位上有一个是0,比如1010 1000,那么结果就会是1010 1000,所以只有奇数位上全1,&以后一定是1010 1010。 所以需要满足条件 1. x & 1010 1010 == 1010 1010 代码: int al...
1.截图说明运行结果,并原因分析。 Unsigened数据和int数据比大小时,int会转化为unsigned int,len-1会成为0xffffffff,那么i就一直小于len-1,直到超出数组a的范围引发错误。 2.论述改进方法 将len声明为int类型数据。 8.2 float的分析(10分) 1.运行结果截图,分析产生原因。 浮点数离0越近越稠密精度越高。例如10...
int tmin(void) { return 1<<31; }3./* * isTmax - 如果x是最大的二进制补码,返回1;否则,返回0 * 允许的操作符: ! ~ & ^ | + * 最多操作符数目: 10 * 分值: 2 */解题思路:最大的二进制补码为0x7FFFFFFF,为判断输入是否为这一个数,我们只需要将其与最小的二进制补码与或一下判断是否...
1.仅允许使用~和&来实现异或 异或也就是两个数据不同的位变为1,相同的位变成0。由于限制了操作符,所以要多绕几圈才能做出来。 首先143行和144行将x进行位非运算然后和y与运算,得到r01,相反地操作得到r02。目的是将x与y不同的位变成1,而相同的位在两边都会变成0,但是由于0与0与会得到0,所以才要进行相反...
深⼊理解计算机系统(CSAPP)课后实验CSAPPLAB1——DataLab 实验说明 《深⼊理解计算机系统》是卡内基梅隆⼤学计算机专业的计算机体系课程的标配教材,可以在B站看其配套⽹课()。课程由书的作者两个⼈共同执教,⽐较适合有C语⾔的基础的同学作为计算机体系构建的课程。但是,仅仅看书收获还是有限的,所以...
用一周的时间写完了datalab,希望这学期能把8个实验写完吧,我的计算机底层知识还是很薄弱,总结一下,把重点的思路和题发出来。 环境的话我使用的是wsl,安装ubuntu2022,相比虚拟机真的是快了很多,只不过没有图形界面。 condtional 题目: * conditional - same as x ? y : z ...
本文提供csapp lab1的datablab操作规范和解答,不提供具体代码,旨在激发思考和灵感。分数:(32/36),部分题目的解决方法需自行查找或创新。操作规范与解答 1. bitXor 要求使用~和&实现^运算,返回X^Y。解析:利用~0变为1,~1变为0,实现X与Y的异或运算。通过x & y和(~x) & (~y)计算,00和...
CSAPP Lab1 bits.c 得分图 bitAnd getByte logicalShift bitCount bang tmin fitsBits divpwr2 negate isPositive isLessOrEqual ilog2 float_neg float_i2f float_twice bits.c 在bits.c中做题目 使用make clean和make进行编译 调用./btest -f funcName测试funcName函数的结果,可以在代码中中插入printf输出中间...