八达网

标题: 问个很简单很白痴的问题,关于short int,请诸位老湿不吝赐教 [打印本页]

作者: 别愁BloodBrood    时间: 2012-6-23 20:19
标题: 问个很简单很白痴的问题,关于short int,请诸位老湿不吝赐教
例1.4 求50的三次方
int main()
{  short x;;
    x=50*50*50;
    printf(”%d\n“,x);
   return 0;
  }

计算结果是-6072         

50的3次方本来应该是12500的,那么现在这个结果,
是因为溢出了吗?

我看了下对照
短整型         short [int]        2        -32768~32767

12500 没有超出这个取值范围啊。怎么会溢出呢   
作者: 别愁BloodBrood    时间: 2012-6-23 20:25
短整型占2个字节 长整型占4个字节
字节的差异怎么影响运算的结果的呢
作者: Springsun    时间: 2012-6-23 20:26
体育老师死得早
作者: baijinjin    时间: 2012-6-23 20:27
高深.几乎完全一点都不明白
作者: 用户名掉包了    时间: 2012-6-23 20:28
体育老师死的早
作者: 西门本座    时间: 2012-6-23 20:36
提示: 作者被禁止或删除 内容自动屏蔽
作者: thegod4204    时间: 2012-6-23 20:47
50*50=2500
2500*50=125000
作者: zerg王    时间: 2012-6-23 20:50

作者: doors    时间: 2012-6-23 21:04
数死早
作者: hengjihengji    时间: 2012-6-23 21:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 今心    时间: 2012-6-23 22:20
你体育老师的数学是生物老师教的吧
作者: zq11211277    时间: 2012-6-24 12:43
体死早
作者: Pentium9    时间: 2012-6-24 13:06
本帖最后由 Pentium9 于 2012-6-24 13:09 编辑
别愁BloodBrood 发表于 2012-6-23 20:25
短整型占2个字节 长整型占4个字节
字节的差异怎么影响运算的结果的呢


是printf  %d的问题

没有单独为short的2个字节设置一个符号,用%d
从printf函数原理来说,函数根据前面的格式字符串来强硬转换后面的参数,比如碰到%d,就表示要将参数强硬转换为int型,如果你传入的参数是short型,short型只要两个字节,那么强硬转换为int(四个字节

原来函数的参数,每一个最少要占一个计算机位长(因为参数要压栈),所以short型参数压栈时已经扩展为四个字节了(32计算机),所以即使用char型当整数输出也是可以的.
作者: hysteria    时间: 2012-6-24 13:13
数学不好的请不要做码农。。
作者: abu1985    时间: 2012-6-24 13:26
50*50*50=125000,楼主你少了个0
作者: 说谎の天使    时间: 2012-6-24 15:01
码农威武!
作者: 潜规则    时间: 2012-6-24 17:21
原创内容 水晶 +2
作者: iamlosingyou    时间: 2012-6-24 20:14
提示: 作者被禁止或删除 内容自动屏蔽
作者: 观阴大湿    时间: 2012-6-24 20:22
50*50*50=125000,换成二进制是个17位的数,但是short int只截取16位,并且16位要取反,要有标志位,然后就变成这个负数了
作者: eternalrage    时间: 2012-6-24 20:33
我是来学习50的三次方等于12500的,楼主你太犀利了
作者: 文若天成偶得之    时间: 2012-6-24 21:54
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 八达网 (https://www.8-da.com/) Powered by Discuz! X2.5