计算机科学--二进制运算

1. 什么是补码?
补码是为了让计算机处理数据更简单、方便,有了补码,计算机就可以把减法转换为加法运算了。
比如,一个8bit类型数据来保存整数
[+10] = 00001010
[-10] = 10001010
我们要计算10-3怎么办呢?
我们会这样做,更确切的说是计算机会这样做:
此时,-3怎么用二进制表示呢?它是+3的转换成二进制,然后取反再加1,即:
-3 = [-00000011] = [11111100+1] = [11111101],所以
10 - 3
= 00001010 - 00000011
= 00001010 + (-00000011)
= 00001010 + 11111101
= 100000111
上面得到的是9bit,而我们只能用8bit来表示数据,所以最前面的一位我们要把它无情的舍掉,这样才能够保证我们的运算的正确性,所以:
10 - 3
= 00000111
= 7
我们用十进制计算10 - 3也是等于7,结果一样。

2. 二进制的移位操作?
二进制可以进行移位操作,可以左移,也可以右移。
这里,我们还是以8bit数据类型来举例:
左移,我们会把最高位溢出,即舍掉,最低位补零,这个没有疑问;
然而,在进行右移的时候,我们将会出现逻辑右移和算术右移两种情况,
①逻辑右移,就是不考虑符号位,直接右移,高位补零,低位舍掉;
②算术右移,如果最高位是1,那么高位就要补1,低位舍掉,如果高位时0,那么高位就补0,低位舍掉;
下面我们举一个例子来说明问题:
比如-32,它的二进制是10100000,那么它右移三位的结果是,按照我们上面所说的情况,最高位是1,那么右移三位的结果是11110100,此时的二进制值是-4。
那么+32,它的二进制是00100000,那么它右移三位的结果是,也同样按照我们的上面所说的情况,在高位是0,那么就补0,低位舍掉,得到00000100,它的二进制是+4。
那么,移位有什么规律吗?这里,在一定条件的前提下,还是有规律的,不如上面我们举的两个例子,一个因为是右移,并且右移的时候,舍掉的都是0,所以,出现这样一个规律,在没有舍掉1的前提下,他就相当于把原来的数除以2^n,这里的n就是右移的位数,-32/(2^3) = -32/8 = -4,符合规律,那么+32/(2^3) = +4,也符合规律。

3. 二进制如何表示浮点数?
浮点数的整数部分表示方式和普通的整数表示方式一样,而小数表示就不一样了,我们举一个简单的例子,来说明二进制表示小数的方式:
0.4=0.5×0+0.25×1+0.125×1+……+0.5×(1 or 0)/n+……这样就会无限的循环下去,无论如何,也不可能完全相等,只能无限的接近0.4这个数值,所以,计算机中计算浮点数是有误差的,有时候,使用浮点数是不安全的,只有当我们的小数部分是0.5,0.25,0.125,0.0625….等这些数值的时候,才能够计算准确,那么既然浮点数是不安全的,我们能不能避免呢?答案是肯定的,有两种办法可以做到:
一种方法是,将小数转换为整数再做运算,比如可以将0.1先乘以10,然后再将结果除以10,这样就避免了误差的存在,另一种是,在我们能够接受的情况下,忽略掉一些误差,不影响我们的计算精度就行。

4. 与或非异或的概念?
与:条件全部满足时才为真;
或:有一个条件满足时就为真;
非:取反;
异或:两个数相同时为假,不相等时为真。

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值