ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 运算符 运算符是一种特殊的符号,用以表示数据的运算、赋值和比较等 1) 算术运算符 2) 赋值运算符 3) 比较运算符/关系运算符 4) 逻辑运算符 5) 位运算符 6) 其它运算符 #### **算术运算符的一览表** ![](https://img.kancloud.cn/23/61/23617ec3f545bd3be4679422c406c0d6_1230x613.png) ![](https://img.kancloud.cn/4b/ab/4bab33bd160e344b23d9873681c28390_994x413.png) ![](https://img.kancloud.cn/4b/ab/4bab33bd160e344b23d9873681c28390_994x413.png) 1) 对于除号 "/",它的整数除和小数除是有区别的:整数之间做除法时,只保留整数部分而舍弃 小数部分。 例如: x := 19/5 ,结果是 3 2) 当对一个数取模时,可以等价 a%b=a-a/b\*b , 这样我们可以看到 取模的一个本质运算。 3) Golang 的自增自减只能当做一个独立语言使用时,不能这样使用 ![](https://img.kancloud.cn/db/41/db4124ef77e431859e44a3cd6df6765b_775x575.png) 4) Golang 的++ 和 \-- 只能写在变量的后面,不能写在变量的前面,即:只有 a++ a-- 没有 ++a --a 5) Golang 的设计者去掉 c / java 中的 自增自减的容易混淆的写法,让 Golang 更加简洁,统一。(强制性的) #### **比较运算符** 1) 关系运算符的结果都是 bool 型,也就是要么是 true,要么是 false 2) 关系表达式 经常用在 if 结构的条件中或循环结构的条件中 ![](https://img.kancloud.cn/6c/bb/6cbb5c39f0d846327dfb725ca7a206fc_1136x552.png) #### **逻辑运算符** 用于连接多个条件(一般来讲就是关系表达式),最终的结果也是一个 bool 值 ![](https://img.kancloud.cn/e1/4d/e14d9ef69e7ae73b7f9f2c6638ce38e4_1434x464.png) 1) &&也叫短路与:如果第一个条件为 false,则第二个条件不会判断,最终结果为 false 2) ||也叫短路或:如果第一个条件为 true,则第二个条件不会判断,最终结果为 true #### **赋值运算符** 赋值运算符就是将某个运算后的值,赋给指定的变量。 ![](https://img.kancloud.cn/d8/a2/d8a2fedb6824261b609e119a14002be2_1182x804.png) Go 语言提供了大多数语言不支持的多重赋值 ![](https://img.kancloud.cn/9e/8d/9e8d9636fba5d17f4e8756d8aa323de8_528x276.png) #### **位运算符** ![](https://img.kancloud.cn/a0/75/a0754613b0fb99a6c0298e6e30abe632_1287x636.png) #### **其它运算符说明** ![](https://img.kancloud.cn/a9/8f/a98f2331836aab31aad21f1187053e82_1362x216.png) #### **实现三元运算的效果** ![](https://img.kancloud.cn/25/ca/25cac61a38d7c8b675af67ff11108a67_1093x467.png) #### **运算符的优先级** ![](https://img.kancloud.cn/20/90/20906d41fc2be4bad0f8efc8dfc4a18f_905x839.png) 1) 运算符有不同的优先级,所谓优先级就是表达式运算中的运算顺序。如右表,上一行运算符总优先于下一行。 2) 只有单目运算符、赋值运算符是从右向左运算的。 3) 梳理了一个大概的优先 1:括号,++, -- 2: 单目运算 3:算术运算符 4:移位运算 5:关系运算符 6:位运算符 7:逻辑运算符 8:赋值运算符 9:逗号 #### **键盘输入语句** 在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。 1) 导入 fmt 包 2) 调用 fmt 包的 fmt.Scanln() 或者 fmt.Scanf() #### **进制** 对于整数,有四种表示方式: 1) 二进制:0,1 ,满 2 进 1。 在 golang 中,不能直接使用二进制来表示一个整数,它沿用了 c 的特点。 2) 十进制:0-9 ,满 10 进 1。 3) 八进制:0-7 ,满 8 进 1. 以数字 0 开头表示。 4) 十六进制:0-9 及 A-F,满 16 进 1. 以 0x 或 0X 开头表示。 此处的 A-F 不区分大小写。 ![](https://img.kancloud.cn/75/b4/75b456c28937693be438c092dc47fc61_758x823.png) #### **进制转换的介绍** 其它进制转十进制 (1)二进制如何转十进制 ![](https://img.kancloud.cn/95/c4/95c4e057ff46bfda3f64b889fcd1e3f2_934x169.png) (2)八进制转换成十进制示例 ![](https://img.kancloud.cn/17/f8/17f88ad4bd78e2d164b7a88bb3c4e787_916x146.png) (3)16 进制转成 10 进制 ![](https://img.kancloud.cn/35/36/35368c6272692eccbf6d9c167591352b_1026x132.png) 十进制转成其他进制 (1)十进制如何转二进制 ![](https://img.kancloud.cn/5f/e7/5fe73ad9624b474cc6c3aecab72c568d_898x430.png) (2)十进制转成八进制 ![](https://img.kancloud.cn/61/50/61502683aeb6b5efeb6738c343441810_883x308.png) (3)十进制转十六进制 ![](https://img.kancloud.cn/6a/73/6a73b8fc6c68c93a70396dfcf9ffbd60_939x291.png) 二进制转换成八进制、十六进制 (1)二进制转换成八进制 为什么是三位一组呢因为三位正好表示0-7 ![](https://img.kancloud.cn/36/fe/36fe51743f86ecf43786171f8f047409_1021x131.png) (2)二进制转成十六进制 ![](https://img.kancloud.cn/b9/eb/b9eb8b21b1aee595a06eb5ed7b824317_1081x124.png) 八进制、十六进制转成二进制 (1)八进制转换成二进制 ![](https://img.kancloud.cn/32/99/3299d4ed076d2c928b1f5f79de11f7b4_757x106.png) (2)十六进制转成二进制 ![](https://img.kancloud.cn/81/bf/81bf9b118295b201700bd68627db6b77_901x125.png) #### **位运算** 二进制是逢 2 进位的进位制,0、1 是基本算符。 现代的电子计算机技术全部采用的是二进制,因为它只使用 0、1 两个数字符号,非常简单方便,易于用电子方式实现。计算机内部处理的信息,都是采用二进制数来表示的。二进制(Binary)数用 0 和 1 两个数字及其组合来表示任何数。进位规则是“逢 2 进 1”,数字 1 在不同的位上代表不同的值, 按从右至左的次序,这个值以二倍递增。 在计算机的内部,运行各种运算时,都是以二进制的方式来运行。 ![](https://img.kancloud.cn/51/5a/515a5688f9062cf62db1757b4f1c7f21_609x859.png) **Golang 中有 2 个移位运算符:** \>>、<< 右移和左移,运算规则: 右移运算符 \>>:低位溢出,符号位不变,并用符号位补溢出的高位 左移运算符 <<: 符号位不变,低位补 0 位移运算也是位运算也是按补码的方式 a := 1 >> 2 // 0000 0001(补码和源码一致) =>0000 0000(补码和源码一致不需要转换) = 0 c := 1 << 2 // 0000 0001(补码和源码一致) ==> 0000 0100(补码和源码一致不需要转换) => 4 左移运算符 <<: 符号位不变,低位补 0 #### **原码、反码、补码** 为什么计算机用补码运算的呢因为计算机没有减法,所以用补码 1+1 1-1 = 1+(-1) ![](https://img.kancloud.cn/78/0e/780e66a5652267171e607a227dc58562_901x446.png)