逻辑运算0==x和x==0具体解释
看很多大牛写的程序经常看到if(0==x){运行体},而自己写的程序常用if(x==0){运行体}。刚開始的时候我还非常自信的觉得这样的表达方式是等价的,大牛们仅仅是为了显摆下与众不同的格调。当读到C语言运算法结合性这部分的内容才恍然领悟大牛的考虑周全。分析步骤例如以下:
“=”运算符的结合性是右结合(从右向左)"=="运算符的结合性是左结合。
0=i这样的格式错误的 0==i和i==0是一样的。
看到这大家是不是明确了点。
if(0==i)这么写的,是为了防止“==”写成“=”。假设不小心将“==”写成“=”
怎样採用if(x==0)形式写就变成了if(x=0),即使写错编译器也不会报错。假设採用if(0==x)形式写就变成了if(0=x),编译器就给出报错。
在VC中会报error C2106: “=”: 左操作数必须为左值的错误。
写个程序測试下:
// Test_zeroeqx.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
int x=0;
/*大牛的写法*/
if(0==x)
printf("x=0");
else if(0!=x)
printf("x!=0");
/*一般人的写法当x==0写成了x=0程序正常运行 结果是x=0 x!=0*/
if(x=0)
printf("x=0");
else if(x!=0)
printf("x!=0");
/*去掉凝视能够看出x=0返回false值*/
/*
bool isZero;
isZero=(x=0);
if(isZero)
printf("x=0返回false")
else
printf("x=0返回false");
*/
getchar();
return 0;
}
从測试程序能够看出,x=0返回false值。
假设将"=="不小心写成"=",假设依照一般人的写法。我们非常难发现错误。而是用大牛的写法。编译器直接报错。
逻辑运算0==x和x==0具体解释的更多相关文章
- 【js奇妙说】如何跟非计算机从业者解释,为什么浮点数计算0.1+0.2不等于0.3?
壹 ❀ 引 0.1+0.2不等于0.3,即便你不知道原理,但也应该听闻过这个问题,包括博主本人也曾在面试中被问到过此问题.很遗憾,当时只知道一句精度丢失,但是什么原因造成的精度丢失却不太清楚.而我在查 ...
- List转String数组 collection.toArray(new String[0])中new String[0]的语法解释
Collection的公有方法中,toArray()是比较重要的一个. 但是使用无参数的toArray()有一个缺点,就是转换后的数组类型是Object[]. 虽然Object数组也不是不能用,但当你 ...
- Swift 3.0 【Swift 3.0 相较于 Swift 2.2 的变化】
一.编译器和语法变化 函数或方法参数 调用函数或方法时从第一个参数开始就必须指定参数名 在Swift的历史版本中出现过在调用函数时不需要指定任何函数参数(或者从第二个参数开始指定参数名),在调用方法时 ...
- RedHat 7.0及CentOS 7.0禁止Ping的三种方法
作者:荒原之梦 原文链接:http://zhaokaifeng.com/?p=538 前言: "Ping"属于ICMP协议(即"Internet控制报文协议") ...
- HTTP协议详解及http1.0与http1.1http2.0的区别
HTTP协议介绍 http(超文本传输协议)是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.特点: (1)支持客户/服务器模式. HTTP是一个客户端和服务器端请 ...
- Caffe使用: Ubuntu 14.04(x64) 从cuda 7.0 升级到 cuda8.0
由于之前已经在Ubuntu 14.04 x64上面安装cuda7.0+caffe, 并且已经配置好,caffe也已经跑通. 但是最近需要使用Torch,而Torch对cuda的要求是8.0,因此决定对 ...
- HTTP1.0/1.1/2.0特性对比_转
转自:HTTP1.0 HTTP1.1 HTTP2.0 主要特性对比 https://segmentfault.com/a/1190000013028798 HTTP1.0 早先1.0的HTTP版本, ...
- ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借
ASP.NET MVC深入浅出系列(持续更新) 一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
为什么说JAVA中要慎重使用继承 这篇文章的主题并非鼓励不使用继承,而是仅从使用继承带来的问题出发,讨论继承机制不太好的地方,从而在使用时慎重选择,避开可能遇到的坑. JAVA中使用到继承就会有两 ...
随机推荐
- java线程中断
public void Thread.interrupt() // 无返回值 public boolean Thread.isInterrupted() // 有返回值 public static b ...
- Android 打开设置界面或者WiFi连接界面
1.使用APP打开系统的设置界面或者WiFi连接界面 startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)); //直接进入手机中的wifi网 ...
- Apache安装简述
软件下载地址:http://pan.baidu.com/s/1o8oexKI 1.httpd -k install 2.httpd -k restart 3.启动bin文件夹里的httpd.exe 4 ...
- 【Oracle】DBMS_STATS.GATHER_TABLE_STATS
月初一直在忙保监会报送的事情,苦逼的保险行业的ETL大家都懂的.今天闲来无事查看了一下前阵子的报送存储过程,发现系统隔一段时间就会调用一次DBMS_STATS.GATHER_TABLE_STATS,所 ...
- tomcat ider配置
xml文件配置: <servlet> <servlet-name>test1</servlet-name>//设定java文件链接的锚点 <servlet-c ...
- PHP实现文字写入图片功能
/** * PHP实现文字写入图片 */class wordsOnImg { public $config = null; /** * @param $config 传入参数 * @param $co ...
- 移动端调试 vConsole
<head> <script src="path/to/vconsole.min.js"></script> <script> va ...
- [Ynoi2011]D2T1
题目大意: 给定一个数列$a$,有以下几种询问: 1. 给定$x$,在序列末尾插入$x$.2. 给定$l,r$,输出$\sum\limits_{i=l}^r a_i$.3. 给定$x$,将数列中的所有 ...
- 自学python 第三天
#!/usr/bin/env python# -*- coding:utf-8 -*- # name = "***"# if "*" in name:# pri ...
- 【[Offer收割]编程练习赛11 D】排队接水
[题目链接]:http://hihocoder.com/problemset/problem/1488 [题意] 中文题 [题解] 莫队算法+树状数组; 首先贪心地知道,应该按照时间从小到大的顺序打水 ...