[英]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.