From 01160af0e2b09c2d0ee9d107183f934aa648709a Mon Sep 17 00:00:00 2001 From: xzh <1037783681@qq.com> Date: Tue, 30 Sep 2025 00:28:50 +0800 Subject: [PATCH 1/2] fix mul5Sat --- README.md | 5 +++-- datalab/bits.c | 20 ++++++++++---------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 73b61f7..233a8bd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Lab1 -- DataLab -> author: 蔡亦扬 +> author: 蔡亦扬、项正豪 ## 一、实验简介 @@ -217,5 +217,6 @@ git push * 本文档编写时参考了 24 年的实验文档 。 * 负责助教: * 蔡亦扬 caiyy23@m.fudan.edu.cn + * 项正豪 zhxiang23@m.fudan.edu.cn -**特别鸣谢**:24Fall ICS助教李增厚 +**特别鸣谢**:24Fall ICS助教李增昊 diff --git a/datalab/bits.c b/datalab/bits.c index c9bc79a..60aa1b6 100644 --- a/datalab/bits.c +++ b/datalab/bits.c @@ -1,3 +1,4 @@ +#include /* * CS:APP Data Lab * @@ -331,16 +332,15 @@ int overflowCalc(int x, int y, int z) { * Rating: 7 */ int mul5Sat(int x) { - int x2 = x << 2; - int sum = x2 + x; - int of_in_x2 = ((x ^ x2) >> 31); - int of_in_sum = ((x ^ sum) >> 31); - int overflow = of_in_x2 | of_in_sum;/*溢出为全1,没有溢出为0*/ - int sign = x >> 31; - int INT_MIN = 1 << 31; - int INT_MAX = ~INT_MIN; - int of_value = (~sign & INT_MAX) | (sign & INT_MIN); - return (overflow & of_value) | (~overflow & sum); + int c2 = 1 << 31; + int c1 = c2 + (~0); + int mark = x >> 31; + int absx = (x ^ mark) + (~mark) + 1; + int sign1 = (absx << 2) >> 31; + int sign2 = ((absx << 1) + absx) >> 31; + int sign3 = ((absx << 2) + absx) >> 31; + int sign4 = sign1 | sign2 | sign3; + return (sign4 & ((mark & c2) | ((~mark) & c1))) | (~sign4 & ((x << 2) + x)); } // P14 From d6412d1e34a9e929d85c2be5c80edd190fca3e8e Mon Sep 17 00:00:00 2001 From: Yiyang Cai Date: Tue, 30 Sep 2025 00:33:24 +0800 Subject: [PATCH 2/2] Delete include stdio --- datalab/bits.c | 1 - 1 file changed, 1 deletion(-) diff --git a/datalab/bits.c b/datalab/bits.c index 60aa1b6..f166d22 100644 --- a/datalab/bits.c +++ b/datalab/bits.c @@ -1,4 +1,3 @@ -#include /* * CS:APP Data Lab *