var numa int64 = 12138 var numb int8 = int8(numa) fmt.Println(numb) //106
字符串
1 2 3 4 5 6
var numa int64 = 12138 var numb int8 = int8(numa) var numc int32 =int32(numb) var str string = fmt.Sprintf("%d %d %d",numa,numb,numc) //fmt.Sprintf是吧其它类型的值转化成字符串的专用函数 //输出12138 106 106
var h int = 189//128+32+16+8+4+1 1011 1101 var i int = 245//128+64+32+16+4+1 1111 0101 var m int = h & i fmt.Println(m) //181 1011 0101
位一样的变为1,不一样的为0
&
或运算(按位或)
都是0为0,其余为1
|
异或运算
两位一样则为0,不一样则为1
^
运算符
左移运算符 <<
高位抛弃,低位补零
1 2 3
var h int = 189//1011 1101 var j int = h << 3//1011110 1000 -> 1110 1000 fmt.Println(j) //232
右移运算符 >>
符号位是什么就补什么
int默认是64位,正数的符号位是0,则右移之后原来的位置补0
选择结构
if
1 2 3 4 5 6 7 8 9
var flag int fmt.Scanf("%d", &flag) if flag == 10 { //go的if中没有() fmt.Println("yes") } elseif flag >= 11 && flag <= 20 { fmt.Println(15) } else { fmt.Println(21) }
for x := 1; x <= 9; x++ { for y := 1; y <= x; y++ { fmt.Printf("%d*%d=%d", y, y, y * y) } fmt.Println() }
//这种主要用于循环数组和字符串等 var str string = "abcdefg" for index, value := range str { fmt.Printf("%d %c", index, value) fmt.Println() } //index和value不是默认的,只是两个接收内容的变量,也可以用占位符_替代,名字是什么都可以,比如inde和valu //for _,_ := range 变量名{} //如果只想获得index,后面的可以不写,占位符也不用写,但如果指向获得后面的,则前面的必须写占位符
1 2 3 4 5 6 7 8
//continue for i:= 1;i<=10;i++{ if i==5{ continue } fmt.Println(i) } //结果是1 2 3 4 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
//break for i:= 1;i<=10;i++{ if i==5{ break } fmt.Println(i) } //结果是1 2 3 4 //如果是嵌套循环,则 for x := 1; x <= 2; x++ { for i := 1; i <= 10; i++ { if i == 5 { break } fmt.Println(i) } } //结果是1 2 3 4 1 2 3 4,只跳出一层循环
指针和数组
指针
1 2 3 4 5 6 7
var num * int = nil//初始化一个空指针,nil就是null的意思 var numa int = 123 num = &numa fmt.Println(num) //输出0xc0000a6058 fmt.Pritln(*num) //输出123 *num = 234 fmt.Println(*num, numa) //输出234 234
var arr = [4]string{"apple", "orange", "pear", "banana"} arr[3] = "123" fmt.Println(arr[3]) //结果是123 //可以直接打印 fmt.Println(arr) //打印数组 for index, value := range arr { fmt.Println(value, index) } /* apple 0 orange 1 pear 2 123 3 */
//多维数组 var arr = [3][2]string{ {"11", "12"}, //用逗号分隔 {"21", "22"}, {"31", "32"}} //最后一个括号一定要在同一行否则会报错 fmt.Println(arr[2][1]) //打印多维数组 for _, value := range arr { //这里的每个value都是一个一维数组 for _, va := range value { fmt.Println(va) //这里的va是一个值 } }
funcmain() { var ge int var sh int var bai int for i := 100; i < 1000; i++ { ge = i % 10 sh = i / 10 % 10 bai = i / 100 if i == ge*ge*ge+sh*sh*sh+bai*bai*bai { fmt.Println(i) } } }
求素数
j要从2开始
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
package main
import"fmt"
funcmain() { for i := 2; i <= 100; i++ { flag := true for j := 2; j < i; j++ { if i%j == 0 { flag = false break } } if flag { fmt.Println(i) } } }