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

原创 2016年08月28日 15:41:15

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

二进制位 :或 异或 与 操作

& 按位与 | 按位或 ^ 按位异或 1. 按位与运算 按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算...
  • berry666
  • berry666
  • 2012年08月30日 18:44
  • 8437

Python 位运算及二进制基础知识

来补点基础知识,这篇讲的是位运算 二进制实际上就是用10进制的数的每一位数字的2的幂数 来看例子: 然后再python的操作中,只要在数字前面加上0b的字符,就可以用二进制来表示十进制数了...
  • bestallen
  • bestallen
  • 2016年06月26日 16:59
  • 10420

二进制反码运算

最近在看计算机网络的相关知识,看到了运输层相关的知识,看到UDP检验和然而却看不懂什么意思!所以只好百度一下二进制 反码运算究竟是如何运算。 首先在计算机中所有的数据都是以二进制的形式存储的,正数和负...
  • dream_follower
  • dream_follower
  • 2016年10月13日 22:13
  • 2470

二进制位运算

http://blog.csdn.net/gzu_imis/article/details/20078479   1.原码 反码 和 补码 二进制位元算包括按位与、按位或、按位异或、取反、左移以...
  • wuxiaobingandbob
  • wuxiaobingandbob
  • 2014年02月28日 18:04
  • 2725

二进制转换和运算符使用

基础知识总结 1):十进制转成二进制 如14的计算过程为 除数 十进制数 余数 2 14 0 2 7 1 2 3 1 2 1...
  • tangxinzitxz
  • tangxinzitxz
  • 2012年10月24日 09:14
  • 1107

二进制中补码计算简单详实的讲解

首先说明一点这篇博文是基于网络资料 写作而来,尊重知识,广泛传播;可能你就需要它。但是转载请注明出处本博文参考链接 参考资料 参考资料本文说明一个基本的问题,补码的问题。负数在计算机中如何表示?举...
  • JQ_AK47
  • JQ_AK47
  • 2015年04月28日 16:39
  • 11701

二进制的位运算

java中的位运算
  • allenjay11
  • allenjay11
  • 2016年05月22日 18:13
  • 1518

计算机中的二进制与位运算

参考文档 http://blog.csdn.net/xiaochunyong/article/details/7748713 1、首先谈谈是如何定义原码、反码、补码的 原码:原码:一个正数,按照绝对...
  • u012316953
  • u012316953
  • 2016年09月02日 15:42
  • 1315

计算机中二进制原码、反码、补码的计算

计算机中原码、反码、补码 正数的 原码 = 反码 = 补码 负数 反码 = 数的绝对值按位取反(最高位符号位除外)          补码 = 反码 +1 已知负数补码求原码 补码取反(最高位符号位不...
  • li45431823
  • li45431823
  • 2015年08月24日 10:47
  • 2806

计算机 各个进制转换算法 (源码)

  • 2017年08月29日 15:26
  • 53KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算机科学--二进制运算
举报原因:
原因补充:

(最多只允许输入30个字)