You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言中int64类型数值的按位非操作实现方法

Go语言中int64类型的按位非操作方法

在Go里,对整数执行按位非用^运算符,但要注意int64是有符号类型,直接用^得到的是基于补码计算的负数结果,和你示例里的无符号位取反不一样,下面分两种情况说明:

直接对int64执行按位非

直接用^运算符即可,但结果是负数——因为int64的高位都是0,按位非后全变成1,对应补码表示的负数:

package main

import "fmt"

func main() {
    var num int64 = 78
    result := ^num
    fmt.Printf("对%d执行按位非的结果: %d (二进制: %064b)\n", num, result, result)
}

运行后会输出-79,这是有符号int64按位非的标准结果。

得到你示例中的无符号位取反结果

你示例里78的7位二进制1001110取反后是0110001(即57),这是只看低7位的无符号取反结果。要实现这个,得先把int64转成无符号的uint64,取反后再保留对应位数:

package main

import "fmt"

func main() {
    var num int64 = 78
    // 转成uint64后执行按位非
    uintResult := ^uint64(num)
    // 保留低7位,匹配你示例的位数范围
    targetResult := uintResult & ((1 << 7) - 1)
    fmt.Printf("78的7位按位非结果: %d (二进制: %07b)\n", targetResult, targetResult)
}

这段代码会输出57,和你示例的预期完全一致。

总结下:如果要的是有符号整数的补码按位非,直接用^num;如果要的是忽略符号位的纯二进制位取反,转成uint64处理后再截取对应位数就行。

内容的提问来源于stack exchange,提问作者Neighbourhood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:43:17