这段代码结果是怎么得到的,求解释???

qq_25199377 2015-06-12 05:23:59
package main

import "fmt"

func main() {
a := uint16(65000)
b := int16(a)
fmt.Println(b)
}

输出: -536
...全文
2302 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
redfox241 2018-10-15
  • 打赏
  • 举报
回复
1、计算机数值存储的是值的补码 2、正数的补码是自身,负数的补码是 符号位不变,其余位数取反,尾数+1 3、uint16 无符号数 65000 -> 1111110111101000 4、int16 有符号数 65000 -> 1111110111101000 5、负数存储为补码 1111110111101000 -> 1000001000011000(补码) = -536
哈哈gogo 2018-10-05
  • 打赏
  • 举报
回复
基础知识啊,基础知识,就是补码的问题,Uint16最大值65536,你给定了65000,那么65536对65000求余,补码,做一个循环相对位,于是结果就是-536
不得闲 2016-12-08
  • 打赏
  • 举报
回复
基础知识啊,基础知识,就是补码的问题,Uint16最大值65536,你给定了65000,那么65536对65000求余,补码,做一个循环相对位,于是结果就是-536
我看你有戏 2016-12-08
  • 打赏
  • 举报
回复
引用 6 楼 suiyunonghen 的回复:
基础知识啊,基础知识,就是补码的问题,Uint16最大值65536,你给定了65000,那么65536对65000求余,补码,做一个循环相对位,于是结果就是-536
这种方法也挺好
我看你有戏 2016-12-07
  • 打赏
  • 举报
回复
这个不能叫溢出吧,内存里的东西还是那点东西,只是类型不一样,所表示的数据也就不一样
Rainyor 2015-12-21
  • 打赏
  • 举报
回复
学下C语言,就明白这个意思了
大道如海 2015-10-16
  • 打赏
  • 举报
回复
a换成2进制是 1111110111101000 b也是 1111110111101000 但b是有符号数,所以第一位1是符号位(表示负数-),值就是后面的15位表示的 转成10进制就是 补码+1 原值:111110111101000 补码:000001000010111 加一:000001000011000 = 536 加上符号就是-536
Carl_CCC 2015-10-13
  • 打赏
  • 举报
回复
这个是溢出了,和go没关系,其他语言都是这样的。
liudng 2015-06-13
  • 打赏
  • 举报
回复
// int16: the set of all signed 16-bit integers (-32768 to 32767) b := int16(a) // 益出

2,190

社区成员

发帖
与我相关
我的任务
社区描述
go语言学习与交流版
社区管理员
  • go语言社区
  • Freeman Z
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧