user-0 提问: 对应于16位单位，int类型的最小取值范围是多少啊

回复:
user: user-1
content: 1 000000000000000  对于二进制表示的负数，符号位是1。该负数对应的绝对值为所有位数取反(0 111111111111111)加1(1 000000000000000)，为32768，所以1 000000000000000对应的负数就是-32768。。 额，是不是这样

user: user-2
content: char,short  还是 -128～127，-32767~32767 这个范围 其他带符号类型 ，是对称的 这是VC limits.h 中摘录的部分内容 // #define INT_MIN     (-2147483647 - 1) /* minimum (signed) int value */  //  -2147483648 = (-2147483647 - 1) // 但是 -2147483648 只是可以存储，在 int (32Bits) 中， //int 可表示最小数为-2147483647，这是新标准吧，不然VC库也不必这么写。 //直接写 -2147483648 多好。  //#define INT_MAX       2147483647    /* maximum (signed) int value */ //#define UINT_MAX      0xffffffff    /* maximum unsigned int value */ //#define LONG_MIN    (-2147483647L - 1) /* minimum (signed) long value */ //#define LONG_MAX      2147483647L   /* maximum (signed) long value */

user: user-3
content: 如果按照事实上int的使用来看，似乎并不存在有+-0的歧义，所以应该有一个标准存在。等懂的人回答你。 引用 8 楼 lovesmiles 的回复:浮点数就存在+0和-0。 1位用来表示符号，8位表示指数，23位表示尾数。 对于浮点数0，是不存在一种表示方法的。指数和尾数所有的位都是0，符号位不为0时，表示的就是负0。  对于int型，1位用来表示符号位，剩下的15位表示数位。 0 000000000000000 //这是很明显的绝对0，即+0。 1 000000000000000 //这是-0还是-1?第一位我们知道它是符号位，后面15位是0，这个就看机器怎么表示吧。如果不当它是-0，当它是-1。那它的范围就是-1~-32768.  这个到底有没有一个统一的标准？这个标准是不是在c++里面也有定义？我也不是很清楚，等懂的人回答你吧。 [quote=引用 7 楼 moyac 的回复:]  0还有分正0和负0的？  [quote=引用 5 楼 lovesmiles 的回复:] [quote=引用 楼主 moyac 的回复:] 《The C Programming Language》中1.2节里面提到是-32768~32767之间，但在《C Primer Plus》3.4.2小节中，提到是-32767~32767。（2的16次方是65 536），到底哪个才是正确的？  这个要看0是怎么表示的了。   如果分正0和负0，就是从-32767~32767.如果不分，就是-32768~32767。 c++的标准只说明了int的占多少字节，没有说它的实现是怎么实现。应该还是看不同的机器吧。 [/quote][/quote][/quote]

user: user-4
content: 扔了后面那本破书

user: user-3
content: 浮点数就存在+0和-0。 1位用来表示符号，8位表示指数，23位表示尾数。 对于浮点数0，是不存在一种表示方法的。指数和尾数所有的位都是0，符号位不为0时，表示的就是负0。  对于int型，1位用来表示符号位，剩下的15位表示数位。 0 000000000000000 //这是很明显的绝对0，即+0。 1 000000000000000 //这是-0还是-1?第一位我们知道它是符号位，后面15位是0，这个就看机器怎么表示吧。如果不当它是-0，当它是-1。那它的范围就是-1~-32768.  这个到底有没有一个统一的标准？这个标准是不是在c++里面也有定义？我也不是很清楚，等懂的人回答你吧。 引用 7 楼 moyac 的回复:0还有分正0和负0的？  [quote=引用 5 楼 lovesmiles 的回复:] [quote=引用 楼主 moyac 的回复:] 《The C Programming Language》中1.2节里面提到是-32768~32767之间，但在《C Primer Plus》3.4.2小节中，提到是-32767~32767。（2的16次方是65 536），到底哪个才是正确的？  这个要看0是怎么表示的了。   如果分正0和负0，就是从-32767~32767.如果不分，就是-32768~32767。 c++的标准只说明了int的占多少字节，没有说它的实现是怎么实现。应该还是看不同的机器吧。 [/quote][/quote]

user: user-5
content: 都用补码存储，就没有+0和-0之分了吧

user: user-6
content: 引用 2 楼 user-9 的回复:short x = -32767;   printf("%d\n", x);   x--;   printf("%d\n", x);   x--;   printf("%d\n", x);  运行结果 -32767 -32768 32767 学程序先要学会在机器上实验啊，以为不同的机器可能有不同的结果，所以在自己机器上实验最保险

user: user-3
content: 引用 楼主 moyac 的回复:《The C Programming Language》中1.2节里面提到是-32768~32767之间，但在《C Primer Plus》3.4.2小节中，提到是-32767~32767。（2的16次方是65 536），到底哪个才是正确的？  这个要看0是怎么表示的了。   如果分正0和负0，就是从-32767~32767.如果不分，就是-32768~32767。 c++的标准只说明了int的占多少字节，没有说它的实现是怎么实现。应该还是看不同的机器吧。

user: user-7
content: 引用 9 楼 lovesmiles 的回复:如果按照事实上int的使用来看，似乎并不存在有+-0的歧义，所以应该有一个标准存在。等懂的人回答你。 [quote=引用 8 楼 lovesmiles 的回复:] 浮点数就存在+0和-0。 1位用来表示符号，8位表示指数，23位表示尾数。 对于浮点数0，是不存在一种表示方法的。指数和尾数所有的位都是0，符号位不为0时，表示的就是负0。  对于int型，1位用来表示符号位，剩下的15位表示数位。 0 000000000000000 //这是很明显的绝对0，即+0。 1 000000000000000 //这是-0还是-1?第一位我们知道它是符号位，后面15位是0，这个就看机器怎么表示吧。如果不当它是-0，当它是-1。那它的范围就是-1~-32768.  这个到底有没有一个统一的标准？这个标准是不是在c++里面也有定义？我也不是很清楚，等懂的人回答你吧。 [quote=引用 7 楼 moyac 的回复:]  0还有分正0和负0的？  [quote=引用 5 楼 lovesmiles 的回复:] [quote=引用 楼主 moyac 的回复:] 《The C Programming Language》中1.2节里面提到是-32768~32767之间，但在《C Primer Plus》3.4.2小节中，提到是-32767~32767。（2的16次方是65 536），到底哪个才是正确的？  这个要看0是怎么表示的了。   如果分正0和负0，就是从-32767~32767.如果不分，就是-32768~32767。 c++的标准只说明了int的占多少字节，没有说它的实现是怎么实现。应该还是看不同的机器吧。 [/quote][/quote][/quote][/quote]  对于大多数计算机而言，都是补码运算的，没有+0和-0之分，所以都是 -32768~32767

user: user-8
content: 请亲自打开include\limits.h看一看。

user: user-5
content: 2e-16~2e16-1

user: user-9
content: 对了，8位的类似，-128~127 11111111 = -1 10000001 = -127 10000000 = -128

user: user-9
content: short x = -32767;   printf("%d\n", x);   x--;   printf("%d\n", x);   x--;   printf("%d\n", x);  运行结果 -32767 -32768 32767

user: user-9
content: 16位可以表示65536个数。 -32768~32767这个范围包括65536个，-32767~32767这个只包括65535个。所以前者正确。