前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基础知识 | 每日一面(22)

基础知识 | 每日一面(22)

作者头像
小林C语言
发布2019-12-30 11:02:12
2050
发布2019-12-30 11:02:12
举报

古代的剑客们与

对手相逢时,无

论对手多么强大,

明知不敌,也要亮出自己的剑!

读者:为什么如下的代码int a = 100, b = 100; long int c = a * b; 不能工作?

小林:根据C语言的内部类型转换规则, 乘法是用int 进行的, 而其结果可能在转换为long 型并赋给左边的c 之前溢出或被截短。可以使用明确的类型转换, 强迫乘法以long 型进行:

long int c = (long int)a * b;

注意, (long int)(a * b) 不能达到需要的效果。当两个整数做除法而结果赋与一个浮点变量时, 也有可能有同样类型的问题,解决方法也是类似的。

读者:我需要根据条件把一个复杂的表达式赋值给两个变量中的一个。可以用下边这样的代码吗?

((condition) ? a : b) = complicated_expression;

小林:不能。? : 操作符, 跟多数操作符一样, 生成一个值, 而不能被赋值。换言之, ?: 不能生成一个“左值”。如果你真的需要, 你可以试试下面这样的代码:*((condition) ? &a : &b) = complicated_expression;尽管这毫无优雅可言。

有时候,正是那些意想不到之人,成就了无人能成之事。

——图灵

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 C语言入门到精通 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档