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

原创 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):十进制转成二进制 如14的计算过程为 除数 十进制数 余数 2 14 0 2 7 1 2 3 1 2 1...

计算机科学与技术学习心得

计算机科学与技术这一门科学深深的吸引着我们这些同学们,上计算机系已经有近三年了,自己也做了一些思考,零零星星的,今天先整理一部分,大家看看有没有用,我一直认为计算机科学与技术这门专业,在本科阶段是不可...

麻省理工公开课《计算机科学及编程导论》中文笔记(第1讲)

Python Django QQ学习群:139220186 ,欢迎各位加入,一起学习。 麻省理工公开课《计算机科学及编程导论》中文笔记(第1讲) by易枭寒说明:本文由@易枭寒(Email:y...

hihoCoder 1167高等理论计算机科学(LCA)

clj在某场hihoCoder比赛中的一道题,表示clj的数学题实在6,这道图论貌似还算可以。。。 题目链接:http://hihocoder.com/problemset/problem/1167...

计算机科学中最重要的32个算法

英文原址:http://www.risc.jku.at/people/ckoutsch/stuff/e_algorithms.html      奥地利符号计算研究所(Res...

从冯•诺依曼结构看计算机科学的发展史

本文主要内容包括: Р    冯·诺依曼体系结构 Р    汇编语言对冯·诺依曼结构的抽象 Р    面向...

【转】“黑客与画家‘——计算机科学、画家与黑客

黑客与画家(翻译) Paul Graham 我读完计算机本科以后,去艺术学校学习绘 画。许多人感到奇怪,喜欢计算机的人也会喜欢美术吗?他们大概认为编程 序和画画是两种完全不同的工作,编程需要冷静,...

计算机科学中最重要的32个算法

原文地址http://www.infoq.com/cn/news/2012/08/32-most-important-algorithms 奥地利符号计算研究所(Research Insti...
  • mxway
  • mxway
  • 2013-06-21 14:30
  • 477

计算机科学中最重要的32个算法

奥地利符号计算研究所(Research Institute for Symbolic Computation,简称RISC)的Christoph Koutschan博士在自己的页面上发布了一篇文章,提...

国外计算机科学类期刊(转载)

刊    名 中文译名 出版国 1 Communications of the ACM 美国计算机学会通讯 美国 2 IEEE tr...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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