上节课我们讲明白了什么是变量。
那么这节课我们来讲怎么让一个变量具有一个值,也就是把数据写到特定的内存空间上。
赋值语句很简单
变量 = 表达式
左边必须是单个变量,且已经被声明,右边是一个能够计算出定值的表达式
举个栗子:
int a;
a=5+5+5;
cout<<a;
int b;
b=a+a+a;
cout<<b;
另外在表达式中可以出现左边的变量本身。例如
int a;
a=6;
a=a*a+a;
根据我们的套娃分析,计算机会先处理右边的等式,也就是说在右边的等式中a是等于6的。处理完右边的等式,得到值42,然后把42赋值给a。
这里容易出现一个错误,就是使用了未初始化的变量。
int a;
a=6+a;
在套娃分析的时候右边等式中a的值是不知道的。在某些情况下默认是0,某些情况下会是个随机数(后续会有讲解)。
另外可以声明变量的时候就初始化
int a=777;
其实这里我们就已经可以用计算机来处理简单的小学数学题了。
比如写一个程序输入梯形的上底下底和高,输出面积
int a,b,h;
cin>>a>>b>>h;
int s=(a+b)*h/2;
cout<<s;
这里应该是我们的读者第一次遇到cin,cin和cout是c++中的输入输出流,cin就是让用户输入值,然后把值赋给对应的变量,注意>>的方向和cout是相反的。
c++的表达式基本运算符有+-*/()&|!^(加 减 乘 除 括号 与 或 非 异或)
以下内容过于复杂读者不必细究。主要是写给一个朋友看的。
下期预告 四叔的c++入门课(5)变量类型
与或非异或都是位运算,如果参与运算的数据是整型,就按二进制每一位进行运算(数据在底层是以二进制形式存储的)
比如5(101)和6(110)
5 & 6 的话就是
1 0 1
1 1 0
——————
1 0 0 (4)
5 & 8 的话就是
0 1 0 1
1 0 0 0
———————
0 0 0 0(0)
与或异或的运算规则都参考上面就行了。右边对齐,左边补0,按位计算(逻辑运算结果只会是1和0所以不存在进位)
顺带一提,异或有一个特殊性质。
设a、b为两个个二进制整数
有 a=(ab)b
这可以用于加密。
前置知识(所有信息的本质都是二进制整数)
有明文a,密码b,把a切成若干段,每段长度与密码的长度接近。然后每段分别异或b,得到密文。接收方得到密文之后,用同样的切法,把它切成若干段,然后再异或密码,就得到了明文。
非运算就是按位非
101(5)
————
010(2)
另外还有一种位运算是位移。
有>>(右移)和<<(左移),就是把数字在二进制上整个移动一下。如果越位了就舍去
举个例子
101(5)
cout<<(5>>1)//右移一位)
结果是10(2)
110(6)
cout<<(6<<1)
结果是1100(12)
所以对整数来说大部分情况下,左移是*2,右移是/2
但我们考虑特殊情况
对一个32位存储的整数,第一位是符号位。
有这样一个数:
01100......
我们左移之后变成了
1100......0
它变成了一个负数!
对一个负数:
1......
右移之后是01......
变成了正数。
因为位运算是计算机底层的运算,a=a<<2和a=a*2,效果一样,但后者用时是前者的几十倍。适当使用位运算,可以让你的程序-1s