如何快速学习一门新编程语言2-表达式有哪些可以用,算数运算逻辑运算位运算关系运算赋值其他

楚天乐 50 0 条

如何快速学习一门新编程语言2-表达式有哪些可以用,算数运算逻辑运算位运算关系运算赋值其他

对照java和go的表达式使用方式,用go重写各种运算。

目录

  1. 目录
  2. 变量如何定义,数据类型有哪些
  3. 表达式有哪些可以用,算数运算逻辑运算位运算关系运算赋值其他
  4. 逻辑控制结构有哪些,条件判断怎么写,循环如何写,分支语句怎么写
  5. 常用数据类型,字符串,数组,哈希表
  6. 面向对象1,类怎么写,类数据成员写法,类方法写法,公有/保护/私有权限怎么控制,静态成员和静态方法
  7. 面向对象2,如何实现继承,以及继承权限控制
  8. 面向对象3,如何实现重载,多态
  9. 面向对象4,面向接口编程
  10. 异常处理机制
  11. 基本数据结构,数组,链表,最小堆,栈,二叉树,图
  12. 推广到更多语言

表达式

运算符

按照java划分方式,运算符分为六大类

  • 算数运算符:加,减,乘,除,取模,自增,自减
  • 关系运算: 6种关系运算,等于(==),不等于(!=),大于(>),小于(<),大于等于(>=),小于等于(<=)
  • 位运算:位与,位或,异或,取反,左移位,右移位,按位右移补0(java才有)
  • 逻辑运算: 3种逻辑运算,与(&&)或(||)非(!)
  • 赋值运算
  • 其他运算

我们接下来逐个翻译成go

算数运算符

  1. 加减乘除,最基本的四则运算,取模,自增,自减少。几乎所有语言里特性都差不多。需要注意的有两点
  • 是有些语言整形除整形得到的是整形,比如c/c++/go,有些语言中则可以得到浮点结果(比如python)
  • golang中的++,--是语句,不是表达式,因此不能赋值。计算机二级考试估计是不会考虑添加golang了,毕竟没法用测试编译器的东西去考学生了对吧

你可还记得某些书呆子出的题???

int a = 10;
int b = a++;
int c = ++b;
.....

Without pointer arithmetic, the convenience value of pre- and postfix increment operators drops. By removing them from the expression hierarchy altogether, expression syntax is simplified and the messy issues around order of evaluation of ++ and --(consider f(i++) and p[i] = q[++i]) are eliminated as well. The simplification is significant. As for postfix vs. prefix, either would work fine but the postfix version is more traditional; insistence on prefix arose with the STL, a library for a language whose name contains, ironically, a postfix increment.

java中用法

public class Test{
    public static void main(String []args){
        int a = 3;
        int b = 2;

        int c = a + b;
        int d = a - b;
        int e = a * b;
        int f = a / b;
        float g = a / (float)b;     // 注意哦,b转换为float类型做除法。int/float=float

        int h = a % b;
        int i = a ++;
        int j = b --;

        System.out.println("3 + 2 = " + c);
        System.out.println("3 - 2 = " + d);
        System.out.println("3 * 2 = " + e);
        System.out.println("3 / 2 = " + f);
        System.out.println("3 / 2.0 = " + g);
        System.out.println("3 % 2 = " + h);
        System.out.println("3++ = " + i);
        System.out.println("2-- = " + j);
    }
} 

执行结果

3 + 2 = 5
3 - 2 = 1
3 * 2 = 6
3 / 2 = 1
3 / 2.0 = 1.5
3 % 2 = 1
3++ = 3
2-- = 2  // 注意哦,b转换为float类型做除法。int/float=float

golang中用法

package main

import "fmt"

func main(){
    var a int = 3
    var b int = 2

    var c = a + b
    var d = a - b
    var e = a * b
    var f = a / b

    // 注意go语言中a和b都要做类型转换到float32
    var g float32 = float32(a) / float32(b)

    var h = a % b

    a ++        // golang中++只能语句,不是表达式,所以不能赋值。还记得c语言int c=++a,d=a++吧。。。
    b --        // golang中++只能语句,不是表达式,所以不能赋值

    fmt.Println("3 + 2 = ", c)
    fmt.Println("3 - 2 = ", d)
    fmt.Println("3 * 2 = ", e)
    fmt.Println("3 / 2 = ", f)
    fmt.Println("3.0 / 2.0 = ", g)
    fmt.Println("3 % 2 = ", h)
    fmt.Println("3++ = ", a)
    fmt.Println("2-- = ", b)
} 

程序输出

3 + 2 =  5
3 - 2 =  1
3 * 2 =  6
3 / 2 =  1
3.0 / 2.0 =  1.5
3 % 2 =  1
3++ =  4
2-- =  1

关系运算

6种关系运算,等于(==),不等于(!=),大于(>),小于(<),大于等于(>=),小于等于(<=)

这部分东西几乎所有语言都是一样的,我们直接写两段代码验证下就好了

  1. java实现
public class Test{
    public static void main(String []args){
        int a = 3;
        int b = 2;

        System.out.println("3 == 2 = " + (a == b));
        System.out.println("3 != 2 = " + (a != b));
        System.out.println("3 > 2 = " + (a > b));
        System.out.println("3 < 2 = " + (a < b));
        System.out.println("3 >= 2 =" + (a>=b));
        System.out.println("3 <= 2 =" + (a<=b));
    }
}

程序输出

3 == 2 = false
3 != 2 = true
3 > 2 = true
3 < 2 = false
3 >= 2 =true
3 <= 2 =false
  1. go实现
package main

import "fmt"

func main(){
    var a int = 3
    var b int = 2

    fmt.Println("3 == 2 = ", a == b)
    fmt.Println("3 != 2 = ", a != b)
    fmt.Println("3 > 2 = ", a > b)
    fmt.Println("3 < 2 = ", a < b)
    fmt.Println("3 >= 2 =", a>=b)
    fmt.Println("3 <= 2 =", a<=b)
}

程序输出

3 == 2 =  false
3 != 2 =  true
3 > 2 =  true
3 < 2 =  false
3 >= 2 = true
3 <= 2 = false

位运算

位运算:位与,位或,异或,取反,左移位,右移位,按位右移补0(java才有)

这些运算在大多数语言中也基本一样。只要知道他是什么,做什么用,换一门语言也是分分钟的事儿。

go语言的取反和异或是同一个运算符^。golang中^作为一元运算时候是取反,二元运算是异或。

顺道嘴两句位运算可以用来干嘛吧

  1. 整数乘以2,本质上就是移位。比如我们有二进制数1(十进制1),给他左移1位,就变成了10(十进制2),在左移1位编程100(十进制4)。。。
  2. 判断一个32位整数是不是负数。计算机中整数都是补码来表示的。最高位作为标志位,0表示正数,1表示负数;对于整数,直接写成二进制放入低31位即可。对于负数,则需要对二进制取反,再加1,对应二进制作为低31位。因此我们只要使用位与运算,判断最高位是不是1即可。首先,对整数a右移31位(a>>31),再位与1即可。如是:a>>31&1
public class Test{
    public static void main(String []args){
        int a = 3;
        int b = -2;

        System.out.println("3是负数?= " + (a>>31&1));
        System.out.println("-2是负数?= " + (b>>31&1));

    }
}

程序输出

3是负数?= 0
-2是负数?= 1


发表我的评论
昵称 (必填)
邮箱 (必填)
网址
执行时间: 58.702945709229 毫秒