运算符的理解

下面是我看到的一个程序

#include <stdio.h>

int main(void)

{

int a=5, b=5, c=4;

a||(b=a+c)&&c;

printf("\na||()b=a+c&&c=%d",a||(b=a+c)&&c);

printf("\na1=%d,b1=%d,c1=%d",a,b,c);

a&&(b=b+1)||(c=b+1);

printf("\na&&(b=b+1)||(c=b+1)=%d",a&&(b=b+1)||(c=b+1));

printf("\na2=%d,b2=%d,c2=%d\n",a,b,c);

return 0;

}

和解释:

这个主要是运算规则和顺序的问题。

&&:从左到右看左边是真才检查右边是否为真;如果左边为假就不考虑左边,也就是说右边不管是什么式子,都不会得到执行

.||: 也是从左到右,左边是真就不检查右边;左边为假才检查右边。&&和||在一个式子中,&&的优先级比较高。 所以,a&&(b=b+1)||(c=b+1);只执行到a&&(b=b+1)这一段,而后面又执行这一段一次。因而b加了两次!

时间: 2024-09-29 23:27:44

运算符的理解的相关文章

关于++和--运算符的理解

在c/c++,java里面都有++/--这样的递增递减的单目预算符.今天在看java代码示例时,看到了下面的代码 1 int x =7; 2 int y =0; 3 x = x++; 4 y=x++; 5 z=++x; 6 printf("y=%d,z=%d",y,z); 上面的代码的输出是7,9. 对于上面的问题的处理,主要是要真正理解了赋值运算符和递增递减运算符的实质: 1. =这个赋值运算符,它是首先计算表达式右边,然后把右边的结果再赋值给左边的变量. 2.关于++/--单目运算

JS按位非(~)运算符与~~运算符的理解分析

按位非运算符,简单的理解就是改变运算数的符号并减去1,当然,这是只是简单的理解能转换成number类型的数据. 那么,对于typeof var!==”number”的类型来说,进行运算时,会尝试转化成32位整形数据,如果无法转换成整形数据,就转换为NaN: JS在位运算上用了更简便的一种方法来实现这中运算,那么它的实现原理大致上可以这样理解:  var testData=-2.9; var testResult=(typeof testData==="number"&&

Python————运算符的理解

运算符其实就是一种“功能”符号,用于执行程序代码运算. 运算符分别分为以下几类:算数运算符,比较运算符,逻辑运算符 算数运算符:算数运算符主要是用来进行一些简单的数学计算,它和数学中的作用是相同的. 例如:              比较运算符:简单的理解就是两个数之间进行比较. 例如:           逻辑运算符:表示复杂的关系 例如: 以上内容纯属本人的理解,如有不详之处,请大佬们多多评论留言. 原文地址:https://www.cnblogs.com/jiekesi/p/1152412

Java 位运算符 深入理解

在Java中存在着这样一类操作符,是针对二进制进行操作的,它们分别是&.|.^.~.>>.<<.>>>几个位操作符,无论是初始值是按照何种进制,都会换算成二进制进行位 操作.接下来对这几种操作符进行一下简单的讲解. &: 作用是对运算符两侧以二进制表达的操作符按位分别进行'与'运算,而这一运算是以数中相同的位(bit)为单位的.操作的规则是:仅当两个操作数都为1时,输出结果才为1,否 则为0,示例如下: 12 的二进制为 1100 5   的二进制

c语言 &amp;取地址运算符的理解

对于c语言中的&运算符,百度百科是这样定义的:(&p)则是这样一种运算,返回当时声明p 时开辟的地址:但是根据我对代码的观察,我觉得&运算符不只是返回地址的功能: 例如: int a = 1;//假设a的地址是0x7dfe88int *p = (int *)0x7dfe88; int num = 1; int *p1 = &num; 以上是一段简单的给指针p,p1赋值的代码,0x7dfe88是一段单纯的十六进制地址,但是当地址转指针的时候却必须加上强转(int *):如果不

使用Java理解程序逻辑错题

此题考查java带参方法的定义及调用.java方法的参数可以任意类型.任意个,返回值不限,返回的类型必须一致,形参和实参的类型必须一致. 因此此题正确答案为D 试题分析 创建一个对象的语法为: 类名 对象名=new 类名();,因此正确答案为BD A.数组下标是从"0"开始,记住这点. B.数组元素类型一定要相同,做作业时候就知道了. C.做作业时候就知道了 D.是length,没有括号 本题考查的是对"=="运算符的理解."=="用于比较两个对

深入理解Javascript之执行上下文(Execution Context)

在这篇文章中,将比较深入地阐述下执行上下文 - Javascript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么,为什么某些函数以及变量在没有被声明以前就可以被使用,以及它们的最终的值是怎样被定义的.什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 - 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码 - 当执行一个函数时,运行函数体中的代码. Eva

对于Javascript 执行上下文的理解

转载无源头地址 在这篇文章中,将比较深入地阐述下执行上下文 – JavaScript中最基础也是最重要的一个概念.相信读完这篇文章后,你就会明白javascript引擎内部在执行代码以前到底做了些什么,为什么某些函数以及变量在没有被声明以前就可以被使用,以及它们的最终的值是怎样被定义的. 什么是执行上下文 Javascript中代码的运行环境分为以下三种: 全局级别的代码 – 这个是默认的代码运行环境,一旦代码被载入,引擎最先进入的就是这个环境. 函数级别的代码 – 当执行一个函数时,运行函数体

C++标准转换运算符const_cast

文章出处:http://www.cnblogs.com/ider/archive/2011/07/22/cpp_cast_operator_part2.html 前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述.C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymorphism)”. 要想很好的使用多态性,就免不了要使用指针和引用,也免不了会碰到转换的问题,所以在这一篇,就把导师讲的以及在网上反复查阅了