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

本文就问答中经常出现的计算机语言和数学公式写法不一致的,与运算符相关的问题进行梳理,希望新手们能够快速度过适应期。(当然,不同计算机语言在表达时也有差异,本文仅以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. 一次使用 Eclipse Memory Analyzer 分析 Tomcat 内存溢出
  2. java 中pc寄存器的作用_既然有PC寄存器,栈帧里的返回地址的作用是什么?
  3. LibreOffice 3.6.6 修复了 50 个 Bug
  4. 表现层持续解耦带来的模式转变 MVC MVP MVVM
  5. android服务应用场景,Android Service的使用介绍
  6. python中的pymysql_(转)Python中操作mysql的pymysql模块详解
  7. GP学习整理(一)—Geoprocessing assembly and Geoprocessor managed assembly
  8. filetransferdmg魅族下载_filetransfer.dmg下载
  9. android 静默安装实现,Android 静默安装实现方法
  10. 95后大厂程序员删库被判刑,只因项目被接手对领导心生不满
  11. java各位数字补位,左边补0
  12. 《Web安全之机器学习入门》笔记:第七章 7.5朴素贝叶斯检测WebShell(二)
  13. C++ 重载操作符 <<实现模拟输出语句: cout << endl;
  14. Django之Form表单验证组件Tyrion
  15. 如何批量修改文件夹中不同文件的名字?命令不正确~
  16. COMPOSITE(组合)模式
  17. 红石外汇|每日分享:0.667是澳元多头在FOMC会议前的最后一道防线
  18. sqlserver 多表查询 老师和学生表
  19. 五个私藏已久的神奇网站,你想要的全都有
  20. chrome控制台打开太慢解决方案

热门文章

  1. git推送拉取需要验证信息
  2. 数据结构与程序设计——C++语言描述(Data Structures Program Design in C++) by Robert L.Kruse Alexander J.Ryb
  3. VUE v-modle 实现 |||| uniapp 父子组件实现 v-modle
  4. vue生命周期中的modle→view过程
  5. Zemax中控制曲率半径
  6. 重力传感器、加速度传感器以及陀螺仪的区别
  7. 数字IC面试高频考点之跨时钟域信号处理
  8. 每日一句_《临江仙·滚滚长江东逝水》
  9. Win10便签删除了怎么恢复?便签删除了的恢复方法
  10. [POI2012]HUR-Warehouse Store(贪心,堆)