您好StackOverflow社區。C中主要返回負值
我實際上正在試圖模擬一個非常基本的shell的項目。我有一個退出內置稱取一個參數,並在此基礎上,我需要返回正確的值(值%256)
例如:
出口42將返回42 出口300將返回44
但例如,我找不到具體的工作方式,例如有人正在嘗試退出-30。我做了一些測試,結果發現它的實際情況是256 - 30,它來自哪裏?
您好StackOverflow社區。C中主要返回負值
我實際上正在試圖模擬一個非常基本的shell的項目。我有一個退出內置稱取一個參數,並在此基礎上,我需要返回正確的值(值%256)
例如:
出口42將返回42 出口300將返回44
但例如,我找不到具體的工作方式,例如有人正在嘗試退出-30。我做了一些測試,結果發現它的實際情況是256 - 30,它來自哪裏?
模總是在編程語言中的正數,除了這裏是returing從主負數OS一個東西C++: How can I return a negative value in main.cpp
C中的'%'運算符*不是*模而是餘數。所以對於簽名類型,它可能是負面的。 –
C標準讓大部分的事情有關的main
返回值由實現定義。基本上返回0
,EXIT_SUCCESS
或EXIT_FAILURE
以某種方式標準和可靠,其他一切都取決於平臺。在這種情況下,操作系統看起來像是以256爲模的值(作爲uint8_t
)。
您的程序正在返回一個unsigned int。由於數字必須是正數,模數的計算值最終看起來像數字「纏繞」。
下面是一些簡單的測試代碼來演示:
int main(){
unsigned int x = -30;
signed int y = -30;
printf("%d\n", x % 256);
printf("%d\n", y % 256);
}
輸出:
226
-30
嗯......這是'-30%256 = 226' – bolov
是的,我知道,但我讀了有是用負數解釋模的不同方式。但是我想了解它背後的含義,我也不確定是否最好在main中退出()或返回()。 – soueuls