簡體   English   中英

ssize_t和size_t給出不同的值

[英]ssize_t and size_t give different values

我對以下打印輸出有疑問:

int logn = 32;
size_t count = (size_t)1<<logn; /* explicit cast required */
ssize_t count2 = (ssize_t)1<<logn;

fprintf(stderr, "count: %zu, count2: %zd\n", count, count2);

輸出:計數:3119849472,計數2:4294967296

為什么這兩個給出不同的值?

ssize_t

是簽名類型。 ssize_t為32位(或更小)的實現中,此表達式:

 (ssize_t)1<< 32

調用未定義的行為。

從C標准:

(c99,6.5.7p4)“如果E1具有帶符號的類型和非負值,並且E1 x 2 E2在結果類型中可表示,那么它就是結果值;否則,行為是不確定的。”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM