一个符号的不同语义妙用

举报
码乐 发表于 2025/10/01 07:55:33 2025/10/01
【摘要】 1 简介在go语言 % 运算符的“取余”功能。不过在 Go 中,% 不仅仅是一个数学意义上的余数运算符。它还有以下几个用处和注意点:基本用处:取余运算 x := 13 % 3 // 结果为 1% 只能用于整数类型(int, int8, uint 等),不能用于浮点数。a % b 的结果和 a 的符号一致(和 C、Java 里保持一致,但与 Python 不同)。例:-5 % 3 == ...

1 简介

在go语言 % 运算符的“取余”功能。不过在 Go 中,% 不仅仅是一个数学意义上的余数运算符。

它还有以下几个用处和注意点:

    1. 基本用处:取余运算

         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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。