这一课很重要因为以后学if while PID 机器人状态判断都会直接用到。今天重点只学 - * / -- -1. 先复习你已经见过int a 5;这里的你现在应该理解成把右边的值存到左边。例如a 10;相当于原来 a ┌─────┐ │ 5 │ └─────┘ 执行 a 10; 变成 a ┌─────┐ │ 10 │ └─────┘所以叫做赋值运算符“赋值”这个词你可以理解成给变量一个值。2.和完全不一样这是 C 初学者非常容易写错的地方。看a 5;意思是把5存进a。但是a 5意思是判断a是否等于5。这里才是“是否相等”。举个例子假设int a 5;那么a 5答案是true因为a确实等于5。但a 10答案是false因为5 ≠ 103. 为什么判断结果是true / false因为我们上一课学过bool表示真假。所以a 5其实会产生一个bool结果。例如int a 5; bool result (a 5);那么result true画出来a 5 a 5 ↓ true ↓ result4. 这和机器人有什么关系例如机械臂有一个状态变量int state 1;假设规定0 停止 1 运行 2 故障以后你就可能写state 2意思是判断机器人现在是不是故障状态。注意不是state 2;这个是在直接修改状态。这两个差别非常大。5. 再看基本运算符你已经知道 - * /例如int a 10; int b 2;那么a b是12a - b是8a * b是20a / b是56. 新东西看int a 5; a;这里意思是给变量加 1。所以执行a;以后a 6它基本等价于a a 1;为什么a a 1不矛盾数学里看起来很奇怪a a 1如果按照数学“等于”这不可能成立。但是别忘了在 C 中是赋值。所以a a 1;执行过程是假设a 5先算右边a 1 5 1 6然后a 6;把6放回a。于是a5 → 67.--和相反int a 5; a--;结果a 4它等价于a a - 1;所以 加 1 -- 减 18. 机器人里很常见比如你做机械臂测试int count 0;机械臂完成一次动作count;第一次count 1第二次count 2第三次count 3以后写循环for (...)时你会非常频繁看到i;所以一定要熟。9.看int a 5; a 3;意思是a a 3;因此a 8所以a 3;读成给a再加 3。10.-同理int a 10; a - 4;等价于a a - 4;结果a 611. 机械臂角度例子假设现在关节角度double angle 30.0;我想让它增加 5°angle 5.0;结果angle 35.0再执行angle 5.0;结果angle 40.0如果想减小 10°angle - 10.0;结果angle 30.0这种写法在控制程序里非常常见。12. 看一个完整例子#include iostream int main() { int count 0; count; count; count 3; std::cout count std::endl; return 0; }我们一步一步执行。开始count 0第一次count;变成count 1第二次count;变成count 2然后count 3;也就是count 2 3所以count 5最终输出513. 再看#include iostream int main() { int state 2; bool error (state 2); std::cout error std::endl; return 0; }这一行bool error (state 2);先计算state 2因为state 2所以2 2结果true于是error true14. 一个非常危险的错误以后你会写if (state 2)意思是如果state等于 2。但初学者经常误写成if (state 2)这不是判断。这是把 2 存进state。所以以后你看到要想到赋值看到要想到判断是否相等这个区别必须形成条件反射。这一课的小练习第 1 题int a 5; a; a;最后a ?第 2 题int b 10; b - 3;最后b ?第 3 题int x 4; bool result (x 4);result是A. true B. false第 4 题下面两个分别是什么意思a 5;a 5