大家好,又见面了,我是你们的朋友全栈君
Int32转换为int16会丢失精度,这是总所周知的,但是具体如何丢失精度的,请看下面的代码:
运行的结果是:
2.原理分析
123424021123456789
123424021
123456789
其实在二进制形式下,上面的两个数字只有一个位是不同的,见上面粗体部分。
当从int32转换为int16时,Golang会截取后面的16位数字,两个数字的截取情况如下:
1234240210100110100010101
1234567891100110100010101
在带符号的二进制数中,最高位为0表示该数字为正数,最高位为1表示该数字为负数,因此:
01001101000101011100110100010101
11001101000101011100110100010101
3.二进制正负数的转换运算
二进制的负数采用补码的方式来实现,运算规则是将正数取反后再加1,例子:
-100100011001001001101110011100-100
1100110100010101100110100010101011001011101011-011001011101011-13035
转载于:https://my.oschina.net/cloes/blog/3004893