int a = 100, b = 100; long int c = a*b; 请教

lostyue 2011-07-01 04:28:23
rt c语言什么400问上面的,为啥这个不行?书上说赋值之前会溢出或者被截短,这个怎么讲?

菜鸟请教 谢谢了
...全文
333 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lostyue 2011-07-01
  • 打赏
  • 举报
回复
结贴 给分~ 谢谢大家
lostyue 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zjs100901 的回复:]

int a = 100, b = 100; long int c = a*b
a*b这个表达式还是int型的。
如果其值大于int可表示的数,而小于long int可表示的数,long int c = 1L*a*b;这样总可以吧。
[/Quote]
谢谢 ~
lostyue 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 luciferisnotsatan 的回复:]

可能书比较旧,int是2位,long int 是4位,而且a,b里至少有一个是1000。1000*100超出了int最大范围,int*int也不会提升类型,那就会截断了。
[/Quote]
好吧.. 3q 懂了..
zjs100901 2011-07-01
  • 打赏
  • 举报
回复
int a = 100, b = 100; long int c = a*b
a*b这个表达式还是int型的。
如果其值大于int可表示的数,而小于long int可表示的数,long int c = 1L*a*b;这样总可以吧。
至善者善之敌 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 lostyue 的回复:]
long long 是8个字节, Int 是4个字节

int a = 100, b = 100;
long long c = a*b;

这个就会出现溢出或者截短的问题么?
可以给解释下么?这个溢出 截短怎么讲?
[/Quote]

这个不会有什么问题,好比小桶装往大桶里倒水,那水是不会溢出的,反之则会溢出或截断
luciferisnotsatan 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 luciferisnotsatan 的回复:]

可能书比较旧,int是2位,long int 是4位,而且a,b里至少有一个是1000。1000*100超出了int最大范围,int*int也不会提升类型,那就会截断了。
[/Quote]
打错了
int是2字节,long int 是4字节
luciferisnotsatan 2011-07-01
  • 打赏
  • 举报
回复
可能书比较旧,int是2位,long int 是4位,而且a,b里至少有一个是1000。1000*100超出了int最大范围,int*int也不会提升类型,那就会截断了。
hackbuteer1 2011-07-01
  • 打赏
  • 举报
回复
不会出现截断、溢出的问题的。。
terhack 2011-07-01
  • 打赏
  • 举报
回复
截断意思就是内存位数太小。。分配的内存表示不了那么大数
比如8位的最大表示2的8次方,那你弄个2的9次方往里存储必然存储不了
lostyue 2011-07-01
  • 打赏
  • 举报
回复
long long 是8个字节, Int 是4个字节

int a = 100, b = 100;
long long c = a*b;

这个就会出现溢出或者截短的问题么?
可以给解释下么?这个溢出 截短怎么讲?
ryfdizuo 2011-07-01
  • 打赏
  • 举报
回复
char short int double 这些类型转 可能会出问题。
int和long int不会。
lostyue 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dizuo 的回复:]

int和long int都是4位。
[/Quote]

int a = 100, b = 100;
那如果 是 long long c = a *b就会出现了?
ryfdizuo 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 dizuo 的回复:]
int和long int都是4位。
[/Quote]晕死,四个字节。。。
lostyue 2011-07-01
  • 打赏
  • 举报
回复
问题:
int a = 100, b = 100;
long int c = a * b;

这样如果不用强制转换,这个赋值语句会有问题,出现问题的原因是 在复制时会出现溢出或被截短,我不太明白这个溢出 或 截短,long int如果是8位,int四位怎么会有问题?
ryfdizuo 2011-07-01
  • 打赏
  • 举报
回复
int和long int都是4位。
terhack 2011-07-01
  • 打赏
  • 举报
回复
你的数据完全没问题
long ,int 都是4个字节,不用担心什么截断
hackbuteer1 2011-07-01
  • 打赏
  • 举报
回复
什么问题?
就想叫yoko 2011-07-01
  • 打赏
  • 举报
回复
int转long int 不会溢出 也不会发生截断
反过来就有可能发生
bdmh 2011-07-01
  • 打赏
  • 举报
回复
啥意思,截断常发生在数据类型转换时,比如double转int之类的
恨天低 2011-07-01
  • 打赏
  • 举报
回复
说清楚你的问题!?
加载更多回复(1)

69,379

社区成员

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

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