#include <stdio.h>
#define TMax 2147483647
#define TMin (-TMax - 1)
int saturating_add(int x, int y);
int main(void)
{
int x= TMax;
int y = TMax;
printf("saturating_add %d\n",saturating_add(x,y));
x = TMin;
y = TMin;
printf("saturating_add %d\n",saturating_add(x,y));
}
int saturating_add(int x, int y)
{
int q = 0x80000000;
/*
printf("q\t %d\n",(q));
printf("q&x\t %d\n",(q&x));
printf("(q&x==q)\t %d\n",((q&x)==q));
printf("((q&y)==q)\t %d\n",((q&y)==q));
printf("((q&(x+y)!=q))\t %d\n",((q&(x+y))!=q));
printf("q\t %d\n",(q));
printf("q&x\t %d\n",(q&x));
printf("(q&x)!=q)\t %d\n",(q&x)!=q);
printf("((q&y!=q)\t %d\n",(q&y)!=q);
printf("((q&(x+y))==q)\t %d\n",((q&(x+y))==q));
*/
printf("x %d\n",x);
printf("y %d\n",y);
int Max = (((q&x)!=q)&&((q&y)!=q)&&((q&(x+y))==q)); //x>0,y>0,x+y<0
int Min = (((q&x)==q)&&((q&y)==q)&&((q&(x+y))!=q)); //x<0,y<0,x+y>0
return (Max*TMax)|(Min*TMin);
}
深入理解计算机系统 CSAPP 家庭作业 2.73
于 2024-04-03 18:33:37 首次发布