如何快速学习一门新编程语言2-表达式有哪些可以用,算数运算逻辑运算位运算关系运算赋值其他
对照java和go的表达式使用方式,用go重写各种运算。
目录
- 目录
- 变量如何定义,数据类型有哪些
- 表达式有哪些可以用,算数运算逻辑运算位运算关系运算赋值其他
- 逻辑控制结构有哪些,条件判断怎么写,循环如何写,分支语句怎么写
- 常用数据类型,字符串,数组,哈希表
- 面向对象1,类怎么写,类数据成员写法,类方法写法,公有/保护/私有权限怎么控制,静态成员和静态方法
- 面向对象2,如何实现继承,以及继承权限控制
- 面向对象3,如何实现重载,多态
- 面向对象4,面向接口编程
- 异常处理机制
- 基本数据结构,数组,链表,最小堆,栈,二叉树,图
- 推广到更多语言
表达式
运算符
按照java划分方式,运算符分为六大类
- 算数运算符:加,减,乘,除,取模,自增,自减
- 关系运算: 6种关系运算,等于(==),不等于(!=),大于(>),小于(<),大于等于(>=),小于等于(<=)
- 位运算:位与,位或,异或,取反,左移位,右移位,按位右移补0(java才有)
- 逻辑运算: 3种逻辑运算,与(&&)或(||)非(!)
- 赋值运算
- 其他运算
我们接下来逐个翻译成go
算数运算符
- 加减乘除,最基本的四则运算,取模,自增,自减少。几乎所有语言里特性都差不多。需要注意的有两点
- 是有些语言整形除整形得到的是整形,比如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种关系运算,等于(==),不等于(!=),大于(>),小于(<),大于等于(>=),小于等于(<=)
这部分东西几乎所有语言都是一样的,我们直接写两段代码验证下就好了
- 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
- 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中^作为一元运算时候是取反,二元运算是异或。
顺道嘴两句位运算可以用来干嘛吧
- 整数乘以2,本质上就是移位。比如我们有二进制数1(十进制1),给他左移1位,就变成了10(十进制2),在左移1位编程100(十进制4)。。。
- 判断一个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
我看不错噢,谢谢老师