c获取最大正整数,最小负整数

最大正整数,即最高位(符号位)为0,其余位皆为1.
-1所有位皆为1
-1右移一位即为最大正整数
但是直接右移是算术右移(所谓算术右移,是指左边补符号位)
所以要先强制转化成无符号,再右移,就是逻辑右移了
(所谓逻辑右移,是指左边补0)

int max = ((unsigned)-1)>>1;

最小负整数,最高位为1,其余皆为0。
即最大正数所有位取反,或最大正整数加1.

int min = ~((unsigned)-1)>>1;

int min = ~(((unsigned)-1)>>1);

ps:
为什么不直接 0xffffffff>>1呢,或者直接 0x7fffffff 呢。
因为上述两种写法是假定int类型占4字节,然而int类型不一定占4字节,因为c标准中没有对此做强制规定。如果int类型不是4字节,上面两种写法显然是错的。

ps:
为什么不用 INT_MAX, 因为闲的。

posted @ 2022-04-19 18:17  enbug  阅读(152)  评论(0编辑  收藏  举报