热爱学习的呆萌的文青 2015-12-21 08:05 采纳率: 54.8%
浏览 2674
已采纳

有符号加法,无符号减法溢出处理的C程序,并运用条件编译指令。。

这是我们老师布置的实验题,请教大神。。

实验名称:跨系统的整型数据类型运算
实验目的:理解不同系统之间存在数据类型的不兼容,理解C语言中为不同系统设计统一数据类型头文件,比如stdint.h。
实验内容:
1、编码实现一个**.c 和**.h两个文件,这**.C中的函数可以让其它程序能过包含**.h引用。“**”根据个人喜好命名。
2、只在小端的系统上运行程序;
3、在**.c中实现以下功能的函数,
函数1: int32_t sat_add(int32_t x, int32_t y, int32_t* flag) 带溢出判断的有附号加法,正溢出时*flag返回TMax, 负溢出时返回TMin;没有溢出时函数返回运算结果, flag返回NULL
函数2: uint32_t sat_sub(uint32_t x, uint32_t y, int32_t
flag) 无符号减法,带溢出判断的函数,只要溢出, flag返回-1;没有溢出,*flag返回NULL, 函数返回运算结果;
4、在
*.h中声明函数;请使用条件编译指令
#ifdef #define, #else, #ifelse, #endif
来防止头文件被多次重复包含
5、请学习使用“extern”关键字。百度上有。使得程序在C++中也能被调用。

  • 写回答

4条回答 默认 最新

  • dragonvii 2015-12-21 10:22
    关注
     //第二个函数的flag参数类型应该是指针或者引用吧,不然没意义了,写个引用的算了,如果是指针就照第一个改
    //extern没太搞懂,这两个函数用不上这个啊,一般用C++写全局变量时就是那种定义在cpp中但是其他.h .cpp也要用时声明
    
    //ooxx.h
    #ifdef OOXX_H
    //啥都不做了
    #else
    #define OOXX_H
    
    
    #define i32 int
    #define ui32 unsigned int
    #define TMax 1
    #define TMin -1
    #define NULL 0
    
    i32 sat_add( i32 x, i32 y, i32* flag );
    ui32 sat_sub( ui32 x, ui32 y, ui32& flag );
    
    #endif
    
    //ooxx.c
    #include "ooxx.h"
    
    
    i32 sat_add( i32 x, i32 y, i32* flag )
    {
        i32 r = x + y;
        //正溢出
        if( flag && x > 0 &&  y > 0 && r < 0 )
        {
            *flag = TMax;
        }else
        //负溢出
        if( flag && x < 0 && y < 0 && r > 0 )
        {
            *flag = TMin;
        }else
        //不溢出
        {
            *flag = NULL
        }
        return r;
    }
    
    ui32 sat_sub( ui32 x, ui32 y, ui32& flag )
    {
        ui32 r = x - y;
    
        //溢出
        if( x - r != y || y + r != x )flag = -1
        没溢出
        else flag = NULL;
    
        return r;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名