1.负数的表现形式,为什么如此设计?
2.-128是在内存中是如何存储的?推算过程?
3.如果字节表示未11111111,则其真实数据是多少?
4.正负数是否都支持补码的方式?
5.正数是否是负数的减一取反?
<------------------------------------华丽的分割线--------------------------------------->
1,在计算机中,负数一般为正数的补码形式,具体运算过程如下:
首先将正数转变为二进制形式,然后每个位上的数取反再加1
例如:byte类型的6,二进制形式为 0000 0110
取反后: 1111 1001
再加1得: 1111 1010
数的最高位为符号位,0代表正数,1代表负数。
byte类型为1个字节也就是8位,去除符号位所以所能表示数的个数为2的7次方,其中包括了0,所以byte类型的范围为-128~127
负数在设计过程中需要遵循数学规则:首先互为相反数的两个正负数相加必须得0,采用补码的方式可以将最高位溢出,保留负数的数学性质。
2,这里要求-128的存储形式,通常情况下我们要求一个负数的表现形式可以通过先求其对应正数的表现形式,然后取反再加1,
但是byte类型中最大的正数是127,上面的方法行不通。我们可以换一个思路,可以先求-127,然后再-1就得到-128了。
毕竟计算机中的负数也得遵循数学规则是吧。
127: 0111 1111
-127: 1000 0001
所以 -128: 1000 0000
3,首先我们可以判断11111111是一个负数,采用逆向思维,我们可以先求其正数形式也就是相反数:方法是-1后,再取反
1111 1111
-1后取反 0000 0001
原数的相反数为正数1,所以原数1111 1111的十进制表示数为 -1
4,是的,正负都支持补码的形式,证明如下:
我们在求一个负数的二进制表现形式的时候通常需要求其对应的正数的补码。而该过程是可逆的,即我们可以通过这个方式反向求
正数的表现形式,-1后取反,如题3中所示,
我们知道负的负数也是正数,那么我们对题3中的1111 1111再求其负数形式,可以采用取反再加1的方式,过程如下:
1111 1111
0000 0000
取反加1 0000 0001
从而证明了正负数都支持补码的形式
5,通过前面3,4的分析我们知道,正数可以通过其对应负数-1后再取反得到,该过程是可逆的。
<------------------------------------华丽的分割线--------------------------------------->
附件中为以下代码:
打印99乘法表
正空心三角形
倒空心三角形
计算器
本文出自 “菜鸟成就数据之路” 博客,请务必保留此出处http://liubx.blog.51cto.com/11235064/1769840
IT十八掌作业_java基础第二天_进制转换原理和补码存储方式
原文地址:http://liubx.blog.51cto.com/11235064/1769840