程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> c語言-有符號加法,無符號減法溢出處理的C程序,並運用條件編譯指令。。

c語言-有符號加法,無符號減法溢出處理的C程序,並運用條件編譯指令。。

編輯:編程綜合問答
有符號加法,無符號減法溢出處理的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++中也能被調用。

最佳回答:


 //第二個函數的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;
}
dragonvii
xq734536013
dragonvii
xq734536013
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved