首页 > 代码库 > csapp2e 家庭作业 2.73
csapp2e 家庭作业 2.73
#include<limits.h> int saturating_add(int x,int y) { int sum = x + y; <span style="white-space:pre"> </span>int w = sizeof(int) << 3; int x_sign = x >> (w - 1); // 取出x的符号位 int y_sign = y >> (w - 1); // 取出y的符号位 int sum_sign = sum >> (w - 1);//取出sum的符号位 int pos_overflow = x_sign && y_sign && !sum; //判断正溢 int neg_overflow = !x_sign && !y_sign && sum;//判断负溢 int overflow = pos_overflow || neg_overflow;//设置溢出位 overflow <<= w - 1; overflow >>= w - 1; //将溢出位设置为全0 或 全 1 int result = (sum & ~overflow ) + ((INT_MAX + !pos_overflow) & overflow); //根据是否溢出进行二路选择 INT_MAX = 0x7fffffff(32位机器) INT_MAX + 1 = 0X80000000 = INT_MIN return result; }
csapp2e 家庭作业 2.73
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。