关于计算机中数值的表示的那点小事
2013-09-16 21:54
274 查看
一、
1、数值在2进制中的表示有3种:原码、反码和补码;这里我只记第3种,因为计算机中,数值的表示只用第3种补码,另外两种用网友的话就是科学家没事吃饱了撑的造出来的(只是开个玩笑,根据哲学中存在比有用的原理,相信他们在其他领域一定还是用的);
2、求补码原则:(1)正数补码还是他本身 (2)负数补码,符号位变成1,其他位取负数的绝对值后按位取反再加1 (3)补码中高位进位都直接丢掉
3、补码的原理:
引入:
生活中我们都知道,
(1)把时钟正拨20分钟和倒拨40分钟结果是一样的
(2)物体正向旋照90度,和它反向旋转270度是一样的
在举一个数学之美,
(3)50 - 20 = 30; 因为20的补数是80(100-20=80),则50 + 80 = 130,去掉进位1,他们的个位+十位是一样的 (再次感叹数学之美)
这就是补数的美丽,正变换一个过程,就等于逆变换这个过程的补数过程(补数过程自己起的名字,不知道该叫他什么了),还有对我们今天讲的最关键的:减去一个数 == 加上这个数的补数,
PS.忘了提上面中一个的关键字:模;模就是规定当一个数大到什么程度的时候要进位,然后再从头开始,物体旋转,最大只能旋转360度,大到360不能再大了就进位然后再从0开始(哲学上,物极必反的道理啦)。这个极限(物体能表示的最大值再+1)就是我们的模;
再回到我们的计算机上,一个数,为了简便我们规定一个数用8bit存,那么8bit的数最大就是1111,1111 不能再大了,再大就进位然后变成 0000,0000。所以8bit 的极限就是2^8-1+1 = 2^8 (极限这个值是表示不出来的,例如没有360度,因为360度就是0度,始终也没有60分钟,60分钟后又变成0了)
4、计算机里面只有加法器没有减法器,所有只能把所有的减法操作都改成加法:所以聪明的科学家就想到了补数这个特性,把所有的定点数都用补数来存;
注意表示的时候,要根据补数的原则(就是那个正数补数是本身......)再变成原始数据;
5、8位的补码能表示的数值范围
由于有符号位,所以补码最大是 0111,1111 = 1000,0000 - 1 = 2^7 -1 = 128 -1 = 127
最小 , 1111,1111 = -(111,1111)= - (1000,0000 - 1)= - (2^-1) = -127
所以补码的数值范围是 -127 ~ +127
6、补码还有一个好处就是 0的表示是唯一的,这一点原码和反码是不具备的。
+0 = 0000,0000
-0 = 1111,1111+1 = (进位丢掉1)0000,0000
二、举例子
还是上面那个例子 50 - 20;
计算机中的处理方式是:
把所有的操作数求补码,运算符当作符号位送给又操作数
所以
(1)+50 的补码,0,011,0010
(2)-20 的补码,
原始二进制数 : 1,001,0100
(符号位置1,数值位将2进制数按位取反再+1) = 1,110,1011+1 = 1110,1100
那么50 - 20 = 50+(-20)
在机器中就是[50】补码+【-20】补码 =
0011,0010
+1110,1100
-------------------
= (1进位丢掉)00011110
(对于高位1,再重复一遍:补码运算进位超过高位就丢掉,不然补码就失去他的良好特性了)
所以50-20 的结果在计算机中的存放的就是 00011110,
但显示的时候,我们还要按照补码的原则,逆变回来(为了变成人们习惯的数)0001,1110 = 30 (tada!!!!! 神奇的补码!!!!)
1、数值在2进制中的表示有3种:原码、反码和补码;这里我只记第3种,因为计算机中,数值的表示只用第3种补码,另外两种用网友的话就是科学家没事吃饱了撑的造出来的(只是开个玩笑,根据哲学中存在比有用的原理,相信他们在其他领域一定还是用的);
2、求补码原则:(1)正数补码还是他本身 (2)负数补码,符号位变成1,其他位取负数的绝对值后按位取反再加1 (3)补码中高位进位都直接丢掉
3、补码的原理:
引入:
生活中我们都知道,
(1)把时钟正拨20分钟和倒拨40分钟结果是一样的
(2)物体正向旋照90度,和它反向旋转270度是一样的
在举一个数学之美,
(3)50 - 20 = 30; 因为20的补数是80(100-20=80),则50 + 80 = 130,去掉进位1,他们的个位+十位是一样的 (再次感叹数学之美)
这就是补数的美丽,正变换一个过程,就等于逆变换这个过程的补数过程(补数过程自己起的名字,不知道该叫他什么了),还有对我们今天讲的最关键的:减去一个数 == 加上这个数的补数,
PS.忘了提上面中一个的关键字:模;模就是规定当一个数大到什么程度的时候要进位,然后再从头开始,物体旋转,最大只能旋转360度,大到360不能再大了就进位然后再从0开始(哲学上,物极必反的道理啦)。这个极限(物体能表示的最大值再+1)就是我们的模;
再回到我们的计算机上,一个数,为了简便我们规定一个数用8bit存,那么8bit的数最大就是1111,1111 不能再大了,再大就进位然后变成 0000,0000。所以8bit 的极限就是2^8-1+1 = 2^8 (极限这个值是表示不出来的,例如没有360度,因为360度就是0度,始终也没有60分钟,60分钟后又变成0了)
4、计算机里面只有加法器没有减法器,所有只能把所有的减法操作都改成加法:所以聪明的科学家就想到了补数这个特性,把所有的定点数都用补数来存;
注意表示的时候,要根据补数的原则(就是那个正数补数是本身......)再变成原始数据;
5、8位的补码能表示的数值范围
由于有符号位,所以补码最大是 0111,1111 = 1000,0000 - 1 = 2^7 -1 = 128 -1 = 127
最小 , 1111,1111 = -(111,1111)= - (1000,0000 - 1)= - (2^-1) = -127
所以补码的数值范围是 -127 ~ +127
6、补码还有一个好处就是 0的表示是唯一的,这一点原码和反码是不具备的。
+0 = 0000,0000
-0 = 1111,1111+1 = (进位丢掉1)0000,0000
二、举例子
还是上面那个例子 50 - 20;
计算机中的处理方式是:
把所有的操作数求补码,运算符当作符号位送给又操作数
所以
(1)+50 的补码,0,011,0010
(2)-20 的补码,
原始二进制数 : 1,001,0100
(符号位置1,数值位将2进制数按位取反再+1) = 1,110,1011+1 = 1110,1100
那么50 - 20 = 50+(-20)
在机器中就是[50】补码+【-20】补码 =
0011,0010
+1110,1100
-------------------
= (1进位丢掉)00011110
(对于高位1,再重复一遍:补码运算进位超过高位就丢掉,不然补码就失去他的良好特性了)
所以50-20 的结果在计算机中的存放的就是 00011110,
但显示的时候,我们还要按照补码的原则,逆变回来(为了变成人们习惯的数)0001,1110 = 30 (tada!!!!! 神奇的补码!!!!)
相关文章推荐
- 计算机系统:关于整数在计算机中的表示
- 关于浮点数和整数在计算机中的表示
- 关于计算机数字表示原理的研究(原码,反码,补码)
- 关于float,double等表示的数值范围的计算
- 一 计算机科学基础 1.2 非数值数据的表示
- 关于浮点数和整数在计算机中的表示
- 计算机中的数值数据表示
- 计算机二进制数值表示为何出现原码反码补码三种方式? and 如何计算?
- [转]关于float,double等表示的数值范围的计算
- 计算机中数值的表示方法
- 关于为什么负数要整数取反+1表示,而不指定首位为符号位,其它位为数值位。
- 各种数值计算机内存的存储规则、补码计算、内存数据位扩展和具体意义、关于位运算
- 计算机中数值的表示
- 尽管是一个CS专业的学生,小B的数学基础很好并对数值计算有着特别的兴趣,喜欢用计算机程序来解决数学问题。现在,她正在玩一个数值变换的游戏。她发现计算机中经常用不同的进制表示同一个数,如十进制数123表达为16进制时只包含两位数7、11(B),用八进制表示时为三位数1、7、3。按不同进制表达时,各个位数的和也不同,如上述例子中十六进制和八进制中各位数的和分别是18和11。
- 关于计算机总线的知识
- 49.表示数值的字符串
- 2.4.6 计算机语言表示算法
- Android开发:setAlpha()方法和常用RGB颜色表----颜色, r g b分量数值(int), 16进制表示 一一对应
- 表示数值的字符串
- 这个是个牛人关于计算机视觉方面。。。做的非常好。。。