Golang中Int32转换为int16丢失精度的具体过程

Golang中Int32转换为int16丢失精度的具体过程为什么80%的码农都做不了架构师?>>>…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

1.类型转换代码

Int32转换为int16会丢失精度,这是总所周知的,但是具体如何丢失精度的,请看下面的代码:

var tmp1 int32 = 123424021
var tmp2 int16
var tmp3 uint16
tmp2 = int16(tmp1)
tmp3 = uint16(tmp1)
fmt.Printf("0x%x,%b,%d\n",tmp1,tmp1,tmp1);
fmt.Printf("0x%x,%b,%d\n",tmp2,tmp2,tmp2);
fmt.Printf("0x%x,%b,%d\n",tmp3,tmp3,tmp3);

fmt.Printf("====================================\n")

var t1 int32 = 123456789
var t2 int16
var t3 uint16
t2 = int16(t1)
t3 = uint16(t1)
fmt.Printf("0x%x,%b,%d\n",t1,t1,t1);
fmt.Printf("0x%x,%b,%d\n",t2,t2,t2);
fmt.Printf("0x%x,%b,%d\n",t3,t3,t3);

运行的结果是:

Golang中Int32转换为int16丢失精度的具体过程

2.原理分析

首先,我们分别把123424021123456789转换为二进制形式:

123424021的二进制形式111010110110100110100010101

123456789的二进制形式111010110111100110100010101

其实在二进制形式下,上面的两个数字只有一个位是不同的,见上面粗体部分。

当从int32转换为int16时,Golang会截取后面的16位数字,两个数字的截取情况如下:

123424021截取0100110100010101

123456789截取1100110100010101

带符号的二进制数中,最高位为0表示该数字为正数,最高位为1表示该数字为负数,因此:

0100110100010101是一个正数,1100110100010101是一个负数。

但是在无符号的二进制数中,我们可以把1100110100010101看作一个正数来处理,此时1100110100010101转换为十进制就是52501。

3.二进制正负数的转换运算

二进制的负数采用补码的方式来实现,运算规则是将正数取反后再加1,例子:

假如我们要表示-100,首先,100的二进制形式是01100100,我们对其近期取反操作10011011‬,然后再进行加一操作后,得到的结果就是10011100,这个就是-100的二进制形式。

结合上面的例子,1100110100010101是一个负数,将100110100010101其按照上面的规则进行逆运算,得到的结果是011001011101011‬‬,就是上面截图中的-011001011101011,转换为十进制就是-13035

转载于:https://my.oschina.net/cloes/blog/3004893

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170554.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 史上最全Java学习视频下载地址分享

    史上最全Java学习视频下载地址分享1.Java基础视频 《张孝祥JAVA视频教程》完整版[RMVB](东西网)历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客)张孝祥2010年贺岁视频:Java高新技术(传智播客)Java多线程与并发库高级应用(传智播客)尚学堂JAVA视频下载大全(持续更新中…请关注!)(尚学堂)《动力节点,王勇JAVA系列视频教程》(东西网)

    2022年7月8日
    17
  • Hadoop生态系统图

    Hadoop生态系统图当下Hadoop已经成长为一个庞大的生态体系,只要和海量数据相关的领域,都有Hadoop的身影。下图是一个Hadoop生态系统的图谱,详细列举了在Hadoop这个生态系统中出现的各种数据工具。这一切,都起源自Web数据爆炸时代的来临。Hadoop生态系统的功能以及对应的开源工具说明如下。MapReduce

    2022年5月19日
    48
  • 软件测试流程及产出物

    软件测试流程及产出物本文目录结构软件测试流程…11      软件项目测试过程…11.1       需求分析…11.2       项目整体计划及评审…11.3       测试用例设计及评审…21.4       测试执行…21.5       测试评估…31.6       产品试用及客户培训…32      软件测试阶段……

    2022年5月21日
    130
  • 坚果课堂回顾:团队项目管理&SOP打造顶尖执行力

    坚果课堂回顾:团队项目管理&SOP打造顶尖执行力【摘要】:已经非常努力高效的利用时间了,可为什么事情还是做不完?todolist产生的速度,超过能处理完成事情的速度? 作为知识密集型行业的代表人群,律师行业始终在探索如何高效利用时间,在有限的时间内创造出更多价值。在律师行业效率变革的驱动下,秉承效率至上的云盘服务提供商坚果云,一直致力于助力律师行业找到高效工作方式。在6月12日…

    2022年5月22日
    38
  • java p12证书_java引用微信支付的p12证书文件

    java p12证书_java引用微信支付的p12证书文件最近对接微信支付的退款功能,其中涉及到引用证书文件。1.绝对路径://windows:publicstaticStringPATH1=”E:\\project_ceshi\\apiclient_cert.p12″;//linuxpublicstaticStringPATH2=”/home/www/ceshi/apiclient_cert.p12″;使用决定路径时,直接引用即可…

    2022年6月23日
    121
  • 蓝墨云班课计算机测试题答案,20155317 第一周蓝墨云班课考题「建议收藏」

    蓝墨云班课计算机测试题答案,20155317 第一周蓝墨云班课考题「建议收藏」201553172016-2017-2蓝墨云班课考题第2周上周蓝墨云班课考题1(单选题|1分)Amdahl定律说明,我们对系统的某个部分做出重大改进,可以显著获得一个系统的加速比。A.正确B.错误正确答案:B解析:课本16页:Amdahl定律的主要思想是:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。假设系统某部分所需执行时间与…

    2022年10月26日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号