对应于16位单位,int类型的最小取值范围是多少啊

moyac 2014-08-05 10:13:25
《The C Programming Language》中1.2节里面提到是-32768~32767之间,但在《C Primer Plus》3.4.2小节中,提到是-32767~32767。(2的16次方是65 536),到底哪个才是正确的?
...全文
2014 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1 000000000000000 对于二进制表示的负数,符号位是1。该负数对应的绝对值为所有位数取反(0 111111111111111)加1(1 000000000000000),为32768,所以1 000000000000000对应的负数就是-32768。。 额,是不是这样
lm_whales 2014-08-07
  • 打赏
  • 举报
回复
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 */
勤奋的小游侠 2014-08-06
  • 打赏
  • 举报
回复
如果按照事实上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]
taodm 2014-08-06
  • 打赏
  • 举报
回复
扔了后面那本破书
勤奋的小游侠 2014-08-06
  • 打赏
  • 举报
回复
浮点数就存在+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]
zhaoge_29 2014-08-06
  • 打赏
  • 举报
回复
都用补码存储,就没有+0和-0之分了吧
imGala 2014-08-06
  • 打赏
  • 举报
回复
引用 2 楼 brookmill 的回复:
short x = -32767; printf("%d\n", x); x--; printf("%d\n", x); x--; printf("%d\n", x); 运行结果 -32767 -32768 32767
学程序先要学会在机器上实验啊,以为不同的机器可能有不同的结果,所以在自己机器上实验最保险
勤奋的小游侠 2014-08-06
  • 打赏
  • 举报
回复
引用 楼主 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的占多少字节,没有说它的实现是怎么实现。应该还是看不同的机器吧。
我叫小菜菜 2014-08-06
  • 打赏
  • 举报
回复
引用 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
赵4老师 2014-08-06
  • 打赏
  • 举报
回复
请亲自打开include\limits.h看一看。
zhaoge_29 2014-08-05
  • 打赏
  • 举报
回复
2e-16~2e16-1
brookmill 2014-08-05
  • 打赏
  • 举报
回复
对了,8位的类似,-128~127 11111111 = -1 10000001 = -127 10000000 = -128
brookmill 2014-08-05
  • 打赏
  • 举报
回复
short x = -32767; printf("%d\n", x); x--; printf("%d\n", x); x--; printf("%d\n", x); 运行结果 -32767 -32768 32767
brookmill 2014-08-05
  • 打赏
  • 举报
回复
16位可以表示65536个数。 -32768~32767这个范围包括65536个,-32767~32767这个只包括65535个。所以前者正确。

70,038

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧