如何查看Go语言中负数-4的二进制内存表示?
查看Go中负数的二进制内存表示
Go里用%b格式化输出有符号整数时,会显示符号位+绝对值的二进制,而非内存中实际存储的补码形式。要查看int8(-4)的真实内存二进制(补码),可以用以下两种方法:
方法1:类型转换为无符号整数
直接将int8类型变量转换为uint8,无符号整数的%b格式化会直接输出内存中的所有位:
package main import ( "fmt" ) func main() { var a int8 = -4 // 转换为uint8后打印补码 fmt.Printf("%08b\n", uint8(a)) }
运行结果:
11111100
这就是-4作为int8在内存中的二进制补码表示。
方法2:使用unsafe包直接读取内存位
通过unsafe.Pointer获取变量的内存地址,再转换为*uint8类型读取内存中的原始位:
package main import ( "fmt" "unsafe" ) func main() { var a int8 = -4 // 直接读取内存中的无符号8位值 fmt.Printf("%08b\n", *(*uint8)(unsafe.Pointer(&a))) }
运行结果同样为:
11111100
补码计算说明
int8类型的-4补码推导过程:
- 4的二进制为
00000100 - 按位取反得到
11111011 - 加1后得到补码
11111100,与输出结果一致。
内容的提问来源于stack exchange,提问作者user1787812
相关产品推荐
相关产品推荐

