简单的正数二进制加法1+5 = 6spa
若是表示负数时,只是单独的拿最高位作符号位 则short型的-7 + 7表示为:3d
看上式,-7+7结果却获得了-14,而不是0code
可是若是-7用反码来表示,就不会有问题:blog
最高位的1出界了,因此获得的就是0了。内存
用补码表示时,正数的补码是本身,负数的补码是绝对值取反加一。若是只用2byte表示数字,好比short,那么 +0和 -0的都是用 00000000 00000000来表示,那么10000000 00000000 这个表示就没有用了,由于只有10000000 00000000取反加一 = 10000000 00000000, 可是10000000 00000000自己是个负数,由于最高的符号位是1,因此把10000000 00000000人工规定为 -215,故short的取值范围是 -215 ~ 215 - 1 class
short s = -1; int i = s;
上面的图例表达的数字是,设符号位为s:扩展
即若是咱们要表示 7.0 = 3.5 * 2(129 - 127) = 1.75 * 2(130 - 127)硬件
只要指数位增长一点,后面的小数位就能够乘除2,因此这样表示能够表示范围很大的数字,从2-127~2128(这里只说了正数,代表精度范围大)二进制
float f = 7.0; short s = *(short *)&f;
如图,上述代码的结果是short只会读取float中高2位字节的内容float