c - 条件运算符在算术运算中的行为
问题描述
这个问题是关于条件运算符如何在算术运算和赋值语句中工作的。
在 gcc、arm-gcc 上测试。
//gcc 5.4.0
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
int temp=70;
int t2=temp%100 + temp>99?2000:1900;
printf("t2=%d",t2);
return 0;
}
//This code returns answer 2000.
//gcc 5.4.0
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
int temp=70;
int t2=temp%100 + (temp>99?2000:1900);
printf("t2=%d",t2);
return 0;
}
//This code returns answer 1970.
//gcc 5.4.0
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
int temp=70;
int t2= temp>99?2000:1900 +temp%100;
printf("t2=%d",t2);
return 0;
}
// Answer is 1970
//gcc 5.4.0
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
int temp=70;
int t2= 5+ temp>99?2000:1900 +temp%100;
printf("t2=%d",t2);
return 0;
}
// Answer is, 1970!
一旦算术语句遇到条件运算,它就会忽略语句的左边部分。(我认为按执行顺序进行条件操作后的任何内容都会被忽略)
此外,我们可以通过使用圆括号 () 或在最左侧进行条件操作来缓解这种情况。谁能解释这种行为?在算术语句中使用条件运算是否会引入任何未定义的行为问题?
也很惊讶以前没有问过这个问题。如果是,请提供链接。非常感谢!
解决方案
推荐阅读
- angular - 将值和选定属性设置为选项标签
- sql - SQL Listagg 作为额外的列
- python - virtualenvwrapper - 多个 2.7.x 版本
- javascript - 使用 Chrome 初始化下拉菜单
- php - 如何修复此 php 标头重定向
- java - 同一会话中的多个 Sessionscoped Bean 实例
- google-cloud-datastore - CLoud Datastore:交易实现细节和监控
- sql - 基于组更新表
- imagemagick - 如何使用 imagemagick 同时更改 dpi 和分辨率?
- c# - 使用 IIS Express 在 localhost 中启动应用程序 - C#