1个回答
展开全部
[复习]
正数的补码=原码
负数的补码=反码+1
反码=原码上除了符号位外,其它所有取反
取反:1改为0,0改为1
X=+0.10010是十进的还是二进的?
当你的是二进的且数据位是8位(字长),有两种算法,(小数点不用0或1表示)
[方法1-常规法/土方法](中括号表示二进)
1>先换成十进的:X[原]=[+0.10010]=[00000000.1001000]=0.5625
2>进行x/2运算:X/2=0.5625/2=0.28125
3>十进换二进:乘2取整法:
0.02815x2=0.56300 取整:0
0.56300x2=1.12600 取整:1
0.12600x2=0.25200 取整:0
0.25200x2=0.50400 取整:0
0.50400x2=1.00800 取整:1
0.00800x2=0.01600 取整:0
0.01600x2=0.03200 取整:0
0.03200x2=0.06400 取整:0
---------------------------------
把上面所有整数按从上到下排列起来,排在小数位就是
.01001000,即0.01001000(虽然有误差,但因为是8个位的字长,所以只需取够8位就行)
所以X/2[原]=[00000000.01001000]
所以X/2补码为:x/2[补]=x/2[原]=[00000000.01001000]
方法二:移位法
一句话:先补够整数和小数位长,然后除符号位外,/2就全右移一位,x2就左移一位(不够的用0补)
x[原]==+0.10010=[00000000.10010000]
除符号位就是 [000000010010000](计算机内部不存小数点,所以不用管小数点是0还是1,小数点是输出时按数据类型自动填上的)
x/2:
[000000010010000](15位)全右移一位,变成
[000000001001000](15位)
恢复小数点:从右向左数8位,点上小数点
[0000000.01001000](共15位)
补上符号位:0(正数):
[00000000.01001000](16位)
所以x/2[原]=[00000000.01001000]
所以x/2[补]=x/2[原]=[00000000.01001000]
正数的补码=原码
负数的补码=反码+1
反码=原码上除了符号位外,其它所有取反
取反:1改为0,0改为1
X=+0.10010是十进的还是二进的?
当你的是二进的且数据位是8位(字长),有两种算法,(小数点不用0或1表示)
[方法1-常规法/土方法](中括号表示二进)
1>先换成十进的:X[原]=[+0.10010]=[00000000.1001000]=0.5625
2>进行x/2运算:X/2=0.5625/2=0.28125
3>十进换二进:乘2取整法:
0.02815x2=0.56300 取整:0
0.56300x2=1.12600 取整:1
0.12600x2=0.25200 取整:0
0.25200x2=0.50400 取整:0
0.50400x2=1.00800 取整:1
0.00800x2=0.01600 取整:0
0.01600x2=0.03200 取整:0
0.03200x2=0.06400 取整:0
---------------------------------
把上面所有整数按从上到下排列起来,排在小数位就是
.01001000,即0.01001000(虽然有误差,但因为是8个位的字长,所以只需取够8位就行)
所以X/2[原]=[00000000.01001000]
所以X/2补码为:x/2[补]=x/2[原]=[00000000.01001000]
方法二:移位法
一句话:先补够整数和小数位长,然后除符号位外,/2就全右移一位,x2就左移一位(不够的用0补)
x[原]==+0.10010=[00000000.10010000]
除符号位就是 [000000010010000](计算机内部不存小数点,所以不用管小数点是0还是1,小数点是输出时按数据类型自动填上的)
x/2:
[000000010010000](15位)全右移一位,变成
[000000001001000](15位)
恢复小数点:从右向左数8位,点上小数点
[0000000.01001000](共15位)
补上符号位:0(正数):
[00000000.01001000](16位)
所以x/2[原]=[00000000.01001000]
所以x/2[补]=x/2[原]=[00000000.01001000]
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询