【发布时间】:2015-07-13 17:57:43
【问题描述】:
据我所知,signed int 的二进制等价物是 11111111111111111111111111111111
并基于此,我试图在不使用limits.h 头文件的情况下为我的程序设置Maximum 和Minimum int 值。运行下面的代码后,我得到最小值为 -2147483648,最大值为 0。下面是我的代码:
int MaxInt(){
int MAX = -1;
MAX = 0 << ((sizeof(int)*8)-1);
return MAX;
}
int MinInt(){
int MIN = 0;
MIN = 1 << ((sizeof(int)*8)-1);
return MIN;
}
我的实现有什么问题。
【问题讨论】:
-
limits有什么问题?你为什么要重新实现它? -
"signed int 的二进制等价物是 11111111111111111111111111111111" - 这是什么意思?你想说“签名它有 32 位”吗?
-
是的,这是 32 位有符号整数 @anatolyg
-
不,这个:11111111111111111111111111111111 不是有符号整数,除非你声明它是(它也可能是无符号整数!),即使那样它也是有符号整数 表示对于单个特定值 - 通常不是 有符号整数。
标签: c++ bit-manipulation