在计算机的世界里,虽然有很多数学的影子,但在计算公式转换为计算机语言时,很多表达方式并 不一致,这导致新手们初期不习惯,很容易用错,需要一个记忆的过程。就像学习英文,主谓宾定状补的先后顺序于中文是不一致的。在翻译句子时很容易产生中式英语。

本文就问答中经常出现的计算机语言和数学公式写法不一致的,与运算符相关的问题进行梳理,希望新手们能够快速度过适应期。(当然,不同计算机语言在表达时也有差异,本文仅以C/C++为例,也暂不考虑C++新标准的特性)。

1、讨厌的等号

判断值相等,用==符号,而变量赋值使用=符号。新程序员们还不太习惯==这个东西,很容易写成=符号。从而是判断语句变成了赋值语句。而编译器也不会报错,但结果却发生了很大的变化。

比如  if(n=0) {do something;}

原意是想判断n等于0的话,执行某些操作,但写成n=0后,先是将n值改成了0,然后由于if(0)不成立,代码根本就不执行if的代码块。因此完全达不到想要的效果,所以一定要注意,回头找不好发现。

对于==误写成=,如果是判断变量与值是否相等,可以有个好方法,就是将值写在左侧,变量写在右侧,如此一旦误写==为=,编译器会报错提醒。

比如 if(a==0),写成 if(0==a),对于==表达式,两种写法都成立,但对于=操作符,只有a=0成立,0=a是错误的。希望对大家有帮助。

2、讨厌的取值范围判断

数学中表示一个值的取值范围,一般写成如: 1<=x<=10这样子。但计算机语言不是这样写的, 必须是x>=1 && x<=10这样的逻辑与表达式。但同样1<=x<=10编译器并不会报错,也是可以执行的代码。先比较1<=x是否成立,结果是个布尔量,成立则为1,否则为0。然后再判断布尔值是否<=10,这是永远成立的,所以只要右侧的值大于等于1,那么无论x是多少,整个表达式结果都是1。同样,如果右侧值小于0,则整个表达式结果是0。这自然不是程序员需要的结果,因此必须要注意。

3、讨厌的乘号

在数学中,两个数相乘时,乘号是可以省略的,但计算机语言中不可以,一旦乘号省略,会被识别为变量名。比如 2*a,写成2a就会报错,因为2a不符合变量命名规范。如果a*2,写成a2,则会报未定义的变量。一旦不幸前面敲好定义了变量a2,那么编译器就不会报错,但程序结果就完全无法预测了。所以要注意,乘号不能省略。

另外,*号即是乘号,也是指针符号,要注意区分。

4、讨厌的除号

除号容易出两个问题,一是除数为0,二是整除。

除数为0时,如果没有提前排除,也没有异常捕捉,那么程序会崩溃。所以一定要先检查除数是否为0的情况,进行特殊处理。

当两个整数相除时,其结果是整除的结果,比如6/4=1,而不是1.5,因此特别要注意,出错率很高,写错了不容易发现。有时候交换表达式中的顺序结果就不一样。

比如6/4*0.5 = 0.5,但6*0.5/4就是0.75。

5、讨厌的逻辑与和逻辑或

逻辑与和逻辑或有熔断的特性,会导致某部分表达式实际不会执行。

比如:

int a=1,b=3,c=5;

if(a>b && b<++c) {do something;}

对于逻辑与表达式,结果为真的条件是两侧表达式结果都为真。如果左侧表达式为假,那么整个表达式结果必然为假,因此右侧表达式将不再执行。

上述if语句中,由于a>b为假,所以右侧的b<++c并不会执行,c值始终是5,没有改变。

if(a<b || b>++c) {do something;}

对于逻辑或表达式,结果为真的条件是有一侧表达式结果为真。如果左侧表达式为真,那么整个表达式结果必然为真,因此右侧表达式将不再执行。

上述if语句中,由于a<b为真,所以右侧的b<++c并不会执行,c值始终是5,没有改变。

这就是逻辑与和逻辑或的熔断特性。此特性在未来模块化编码中也会经常使用。特别是在指针的应用上。比如经常会有如下代码:

Node *p = head;

if(p != NULL && p->data != x) { p = p->next;}

如果没有熔断特性,当p为空时,右侧表达式就会导致程序崩溃。但由于左侧表达式为假,因此右侧表达式就不会执行,程序正常运行。

新手看过来----讨厌的运算符相关推荐

  1. C/C++新手看过来----讨厌的符号

    新手第一个容易出问题的地方就是各种符号的使用,就像英语中各种发音一样,在刚学的时候是痛苦的,容易混淆,导致错误使用,出现各种当下看来是"奇异"的结果,在水平相当的同学中,得不到解决 ...

  2. Oracle 数据库 简单操作命令(新手看 可以收藏哟)

    目录 Oracle 数据库 简单操作命令(新手看 可以收藏哟) 一.认识 Oracle 1.简介 2.需要了解的知识点 3.命令类型 二.SQL 查询 1.了解表及表的结构 2.SQL语句特点 3.简 ...

  3. python中的点表示什么_Python里面这些点,新手看完之后完全不知道这些点

    原标题:Python里面这些点,新手看完之后完全不知道这些点 Python虽然语法简单,通俗易懂,但是再简单它也是一门语言,就像一棵大树,总有一些树枝是弯弯绕绕的,让新手看完之后一脸懵逼,今天我们就来 ...

  4. Java新手看招 常用开发工具介绍

    Java新手看招 常用开发工具介绍 Java的应用越来越广泛,学习Java的人也越来越多.学过程序设计的人知道,使用Basic进行程序设计,可以使用QBasic.Visual Basic等开发工具:使 ...

  5. network location awareness启动不了_【新手看过来】无钥匙启动功能

    原标题:[新手看过来]无钥匙启动功能 [新手看过来]无钥匙启动功能 偶尔有车主反馈,无钥匙启动功能失效.这篇推文我们就讲讲无钥匙启动这个功能的具体操作. 您的车辆配备有电子无钥匙启动开关,是按钮式启动 ...

  6. python基础看什么书-python新手看什么书比较好?这五本最靠谱

    Python Python开发 Python语言 python新手看什么书比较好?这五本最靠谱 结合我做开发这么多年经验, 总结了以下五本书对学python的人来说很有帮助! 1.<Python ...

  7. GOM引擎登陆器自动更新教程(不会的新手看)

    GOM引擎登陆器自动更新教程(不会的新手看) 每个人的登陆器列表最下方都会有[Upgrade]列表更新段,如下:(没有[Upgrade]的,到配置器文件夹中找"列表例子.txt"里 ...

  8. 我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中)

    我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中) 最初写这篇文章的时候,是在今年的 9 月中旬.今天,我想再写写这将近两个多月以来的感受. 在今年的 10 月我来到北京求 ...

  9. 新手看过来:随车千斤顶怎么用?

    新手看过来:随车千斤顶怎么用? http://henan.qq.com/a/20130918/008228.htm [太平洋汽车网 用车频道]新手们最怕遇上什么情况?第一次换备胎绝对可以算其中一种-- ...

  10. php电影选座功能,电影选座系统,挺简单的适合新手看

    [实例简介] 电影选座系统,挺简单的适合新手看 [实例截图] [核心代码] MovieSelectSeatActivity电影选座 └── MovieSelectSeatActivity ├── An ...

最新文章

  1. 转: Ubuntu 安装字体方法
  2. 只要你懂为啥有人爱砍传奇,就能明白《逃离塔科夫》为何会成功
  3. uni.request接口封装;小程序uni-app接口封装
  4. docker jenkins 公钥_搭建 Jenkins 与 GitLab 的持续集成环境
  5. 一篇故事看懂从 session-cookie 到 JWT 的技术演变
  6. linux切换tab,linux-mint – ALT-TAB切换器中的图标从哪里加...
  7. [Contest20180116]随机游走
  8. C语言使用信号量(Linux)
  9. Html常用正则表达式
  10. 为什么QQ空间远离我们?
  11. opensim源码安装教程
  12. MSP430开发环境配置
  13. 迎接虎虎生威的2010暨2009年51CTO年终总结大会
  14. django模型多对一 多对多 一对一三种关系解读
  15. 挑战华为社招:java工程师都要掌握哪些技术
  16. 哈工大移动互联网复习
  17. 【EXCEL】解决因为删除、移动、隐藏行后序号不连续的问题
  18. cmd的一些有趣命令
  19. 图解 RNN, LSTM, GRU
  20. 记录心情(20180404)

热门文章

  1. GL-Currencies-Rates-Daily:Error:APP-FND-01206: This record already exists-文档 ID 292731.1
  2. 华为OD机试真题目录(Java JavaScript)
  3. Python办公自动化之PPT幻灯片自动化:使用Python制作PPT 操作PPT
  4. CSDN上传资源与修改下载所需积分的问题
  5. A.Busiest Computing Nodes
  6. LetAllLinesOfCodeSpeak_杂记
  7. NFT和游戏化的革命-通过 Play Earn 尝试世界上第一个国际象棋游戏
  8. diy无感无刷电机霍尔安装_永磁无刷直流电机霍尔位置传感器的安装
  9. 只有rear指针的环形循环队列
  10. 使用国内镜像源来加速python pypi包的安装