• 四叔的c++入门课程(4)赋值语句与表达式


    上节课我们讲明白了什么是变量。
    那么这节课我们来讲怎么让一个变量具有一个值,也就是把数据写到特定的内存空间上。
    赋值语句很简单
    变量 = 表达式
    左边必须是单个变量,且已经被声明,右边是一个能够计算出定值的表达式
    举个栗子:

    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

  • 相关阅读:
    网站构建前期知识掌握
    Lucene学习之CURD
    Lucene学习之初步了解
    jQuery的extend详解
    jQuery和DOM对象之间的转换
    Tomcat教程
    Log4j配置
    Java学习之Java中常用对象
    Java学习之Comparable与Comparator的区别
    测试工具。
  • 原文地址:https://www.cnblogs.com/sherrlock/p/13567523.html
Copyright © 2020-2023  润新知