首页 > 其他分享 >结合性和优先的联系与区别

结合性和优先的联系与区别

时间:2023-11-17 15:22:04浏览次数:26  
标签:11 优先 优先级 22 区别 ++ 99 int 结合

一、结合性与优先性

当我们考虑运行一段复杂表达时,我们是先考虑优先级再考虑结合性。
也就是说优先级高的先运算出结果,然后在同一优先级的情况下去判断结合性。

二、题目

int i = -2;
int n = ++i == 0 ? 99 : i == -1 ? 11 : 22;

请问n的值是多少?

答:n = 11!

why?

根据优先级,++i的优先级最高,因此先算出其值,也就是i此时等于-1,然后再是关系运算符==,算出i==0与i==-1,前一句0后一句1,最后带入到条件运算符?:
得到n=0?99:1?11:22
此时优先级一致,安条件运算符?:的结合性分析(右结合)
得到n=11。

三、关于++i与i++的变式

i++;与++i;的区别

截取里面的一点内容,关于i++与++i的原理实现
int i;
int firstAdd() {
	i = i + 1;
	return i;
}

int lastAdd() {
	int temp = i;
	i = i + 1;
	return temp;
}

int main() {
	i = 0;
	i = firstAdd();//i=++i
	printf("%d\n", i);

	i = 0;
	i = lastAdd();//i=i++
	printf("%d", i);

	return 0;
}


注意:i=-1;++i==0;与i++==0;不一样,前者结果为1后者结果为0。
如果i=-1呢?
如果换成n=i++==0?99;i==-1?11:22;呢?
如果换成n=i++==-1?99;i==-1?11:22;呢?

标签:11,优先,优先级,22,区别,++,99,int,结合
From: https://www.cnblogs.com/cony1/p/17838849.html

相关文章

  • Svg动画和Canvas动画有什么区别
    一、什么是SVG动画SVG(ScalableVectorGraphics)动画是指使用SVG技术创建的可缩放矢量图形进行动画效果的展示。SVG动画可以通过CSS或JavaScript来实现,常见的SVG动画包括以下几种类型:   CSS动画:使用CSS的@keyframes规则和animation属性来定义和控制SVG元素的动画效果。可以通过指......
  • Spring中@Autowired和@Resource的区别
    说明注解提供方:@Autowired这个由Spring提供;@Resource由JDK提供区别①注解内参数不同@Autowired只包含一个required参数,默认为true,表示注入的时候,该bean必须存在,否则就会注入失败;required=false,表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错@Resource包含七个参数,其中最......
  • 类的实例方法和静态方法的使用场合区别
    面向对象编程(Object-OrientedProgramming,简称OOP)是一种编程思想,它使用类(Class)和对象(Object)的概念来组织和管理代码。在OOP中,类是一种模板,用来定义对象的属性(成员变量)和行为(成员方法)。对象则是类的实例,它们包含了类中定义的属性和方法,并且可以根据需要进行创建和操作。在OOP中,类......
  • truncate和delete的区别
    truncate和delete的区别在于四个方面:1.条件删除、2.事务回滚、3.清理速度、4.高水位重置。因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。1.条件删除这个比较好理解,因为delete是可以带WHERE的,所以支持条件删除;而truncate只能删除整个表。2.事......
  • 11.16 基本完成个人任务管理系统项目后重新复习JavaScript高级程序设计——声明var与l
    我看的是js高级程序设计第四版,前两章快速了解了一下,第三章开始慢啃,虽然内容枯燥,很多东西自己也知道了,但还是有一些收获的。比如,声明变量的三个关键词:var、let、const;var以前经常用但是会出问题,相比let没有那么严谨(var声明范围函数作用域,而let声明范围块级作用域)。看个例子:这是v......
  • 为什么要用JWT,JWT与Seeion区别
    一、为什么使用JWTHTTP是无状态的,开发人员需要基于HTTP来模拟实现状态的保存。经典的实现用户登录的做法是用Session,用户登录验证成功后,服务端生成SessionId。服务端会将SessionId与登录的用户信息的对应关系保存在服务器内存中,同时将SessionId返回给浏览器端,sessionId一般存储在......
  • 多线程threading模块(二)daemon和join的区别
    PythonVersion:3.10.12案列一:最简洁的情况,在多线程代码中不开启daemon或join功能。importthreadingimporttimeloop_count=5defcount_num(num):print('子线程<{}>开始运行'.format(num))forxinrange(10):time.sleep(x)print('子线程<{}>结束......
  • flannel和calico的区别
    一,flannel和calico是为了解决什么问题 Flannel和Calico主要是为了解决容器间通信和容器与宿主机之间的通信问题。这些问题在云计算、大数据等场景下尤为重要,因为在这些场景中,需要支持大规模的容器部署和管理,并保证网络的高性能、灵活性和安全性。 二,flannel和calico的实现原......
  • vue2和vue3ref的区别(详解)
    Vue2和Vue3中ref的区别如下:在Vue2中,ref主要用于在模板中获取DOM元素或组件实例。而在Vue3中,虽然ref也可以获取DOM元素或组件实例,但更重要的是,它还可以将一个基本类型的变量转换成响应式的数据,无需再通过复杂的步骤来访问响应式数据。另外,Vue3的ref还支持对象属性和数组索引......
  • 什么是e2e测试 什么是单元测试,他们的区别
    "E2E测试"中的"E2E"代表"端到端"(End-to-End)。在这里,“端”指的是软件应用或系统的整个流程的起点和终点。在端到端测试中,测试的重点是模拟用户的实际使用场景,从而确保整个应用程序或系统从开始到结束都能按预期工作。具体来说,这些“端”可以是:用户界面(UI)端:用户与系统交互......