一个符号的不同语义妙用
【摘要】 1 简介在go语言 % 运算符的“取余”功能。不过在 Go 中,% 不仅仅是一个数学意义上的余数运算符。它还有以下几个用处和注意点:基本用处:取余运算 x := 13 % 3 // 结果为 1% 只能用于整数类型(int, int8, uint 等),不能用于浮点数。a % b 的结果和 a 的符号一致(和 C、Java 里保持一致,但与 Python 不同)。例:-5 % 3 == ...
1 简介
在go语言 % 运算符的“取余”功能。不过在 Go 中,% 不仅仅是一个数学意义上的余数运算符。
它还有以下几个用处和注意点:
-
-
基本用处:取余运算
x := 13 % 3 // 结果为 1
-
% 只能用于整数类型(int, int8, uint 等),不能用于浮点数。
a % b 的结果和 a 的符号一致(和 C、Java 里保持一致,但与 Python 不同)。
例:-5 % 3 == -2,而不是 1。
2. 循环控制和奇偶性判断
if i % 2 == 0 { fmt.Println("Even") }
if i % 2 == 1 { fmt.Println("Odd") }
通过 %2 判断一个数的奇偶性,这是最常见的应用。
- 循环结构中的周期控制
经常用 % 来做循环“取模”,例如让计数器在固定范围内循环:
for i := 0; i < 20; i++ {
fmt.Println(i % 5) // 输出 0 1 2 3 4 0 1 2 3 4 ...
}
这种场景常见于:
数组/切片的循环访问
轮询/调度系统
循环缓冲区(ring buffer)
3 格式化和哈希算法 / 散列表定位
在实现哈希表时,常用 % 来将哈希值映射到桶的索引范围内:
index := hashValue % len(bucket)
- 在格式化字符串里的 %(完全不同的语义)
在 fmt.Printf、fmt.Sprintf 等函数中,% 是格式化占位符的起始符号:
fmt.Printf("x = %d, str = %s\n", 42, "hello")
%d 表示整数
%s 表示字符串
%f 表示浮点数
这里的 % 不是运算符,而是格式化语法的一部分。
4 小结:
在 Go 语言里,% 有两个主要语义:
运算符:取余(只能用于整数,常用于奇偶判断、周期循环、哈希分桶)。
格式化符号:在 fmt.Printf 系列函数里作为格式化占位符。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)