2014-02-27 55 views
0

您好StackOverflow社區。C中主要返回負值

我實際上正在試圖模擬一個非常基本的shell的項目。我有一個退出內置稱取一個參數,並在此基礎上,我需要返回正確的值(值%256)

例如:
出口42將返回42 出口300將返回44

但例如,我找不到具體的工作方式,例如有人正在嘗試退出-30。我做了一些測試,結果發現它的實際情況是256 - 30,它來自哪裏?

+1

嗯......這是'-30%256 = 226' – bolov

+0

是的,我知道,但我讀了有是用負數解釋模的不同方式。但是我想了解它背後的含義,我也不確定是否最好在main中退出()或返回()。 – soueuls

回答

0

程序返回到linux內核的返回值是uint8_t類型。

+0

'unsigned uint8_t'不存在,'uint8_t'由定義無符號。 – Kevin

3

C標準讓大部分的事情有關的main返回值由實現定義。基本上返回0EXIT_SUCCESSEXIT_FAILURE以某種方式標準和可靠,其他一切都取決於平臺。在這種情況下,操作系統看起來像是以256爲模的值(作爲uint8_t)。

1

您的程序正在返回一個unsigned int。由於數字必須是正數,模數的計算值最終看起來像數字「纏繞」。

下面是一些簡單的測試代碼來演示:

int main(){ 
    unsigned int x = -30; 
    signed int y = -30; 
    printf("%d\n", x % 256); 
    printf("%d\n", y % 256); 
} 

輸出:

226 
-30