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

原创 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。参与运算...

二进制转换和运算符使用

基础知识总结 1):十进制转成二进制 如14的计算过程为 除数 十进制数 余数 2 14 0 2 7 1 2 3 1 2 1...

一步成高手:终极图解内存(上篇)

《电脑高手》也都是一笔带过。作为电脑中必不可少的三大件之一(其余的两个是主板与CPU),内存是决定系统性能的关键设备之一,它就像一个临时的仓库,负责数据的中转、暂存…… 不过,虽然内存对系统性能的至关...

数组与链表的优缺点和区别

1.数组: 数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要 在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加...
  • Mormont
  • Mormont
  • 2016年12月02日 22:32
  • 3878

麻省理工学院公开课:计算机科学及编程导论习题3下

有一个字符串“ATGACATGCA”,我想搜索“ATGC”,可以在(5, 15)处找到。 如果把“ATGC”分成“A”、“T”和"GC";假设不知道"T”,只查“A”和"GC",那么分别n = (0,...

计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

系统软件这个概念其实比较模糊,传统意义上一半将用于管理计算机本身的软件称为系统软件,以区别普通的应用程序。系统软件可以分成两块,  一块是平台性的,比如操作系统内核、驱动程序、运行库和数以千计的...

《计算机科学导论》读书笔记

第一章 绪论         讲了图灵(非常DIAO的一个老头子)模型和冯·诺依曼(另一个非常DIAO的老头子)模型,简要说了下计算机组成,然后就是每本教材不得不讲的历史。。。。 第二章 数字系统...

公开课学习笔记-[哈佛]计算机科学CS50(一)

看公开课“哈佛-计算机科学CS50”,看来一下课程目录,哦,学得真快,一个学期完成这么多,很有效率。和之前看完的斯坦福的课程比起来,录像的效果好,可能是时间不同吧。 第1课:开始 2011.9.19...

计算机科学-第9周 数组、结构体、指针综合练习 题目及参考解答

第9周 数组、结构体、指针综合练习1、阅读程序阅读下面的程序,写出运行结果,上机时运行程序,记录结果,从而能够理解指针的用法(1)#includeint main(){    char a[]="He...

大学计算机科学的14个知识领域

大学级别的计算机科学知识可以归纳成14个知识领域
  • yqj2065
  • yqj2065
  • 2014年09月15日 17:37
  • 4609
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算机科学--二进制运算
举报原因:
原因补充:

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