二进制运算符.doc_第1页
二进制运算符.doc_第2页
二进制运算符.doc_第3页
二进制运算符.doc_第4页
二进制运算符.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

二进制基础知识1、区别逻辑运算和算术运算算术运算有可能产生进位,而逻辑运算按位运算不会产生进位。例如:1b+1b=10b 1b or 1b =1b1b*10b=10b1b and 10b=10b 01b and 10b=00b2、逻辑运算: Not 非, And 与, Or 或, Xor异或 , Eqv等价, Imp蕴含 T Imp F F,其他情况为T请注意1、not,and,or的其他表示方式,如2、以下T(1),F(0)互用,因为逻辑运算是按位运算Not:Not T=FNot F=TAnd:T and T=T T and F=F F and T=F F and F=FOr:T or T=T T or F=T F or T=T F or F=FXor:用来对两个表达式进行逻辑互斥或运算。 Xor是“异或”,意思就是不相同的进行或运算, 那么相同的就不进行或运算了.语法 result=expression1Xorexpression2 Xor运算符的语法具有以下几个部分: 部分 描述 result 可选;任何数值变量。 expression1 必需的;任何表达式。 expression2 必需的;任何表达式。 说明 如果表达式中有一个而且只有一个值为True,则result为True。但是,如果表达式中有一个为Null,则result也为Null。当两个表达式都不为Null,则根据下表来确定result: 如果expression1为|且expression2为|则result为 True|True|False True|False|True False|True|True False|False|False Xor运算符既可作为逻辑运算符,也可作为位运算符。使用互斥或的逻辑进行的两个表达式的逐位比较,其结果通过下表说明: 如果expression1为|且expression2为|则result为 0|0|0 0|1|1 1|0|1 1|1|0 例子:2=00000010 3=00000011 - 1=00000001 可以看出2与3只是最后一位不同,所以异或结果为1 又如: 2=00000010 9=00001001 - 得00001011这个数换成十进制就是十一。Eqv:同或运算,相应位相异得0,相同得1。 0 eqv 0=1 0 eqv 1=0 1 eqv 0=0 1 eqv 1=1例子:在计算机环境下: 10=0000000000001010 eqv 2=0000000000000010 - cn=1111111111110111=-9Imp:蕴含 T Imp F F,其他情况为T只有 1 imp 0=0其他情况都是1。例子:在计算机环境下: 1=0000000000000001 imp 2=0000000000000010 - cn=1111111111111110=-23、位操作:shl逻辑左移,shr逻辑右移例如:2 SHR1表示2按位右移一位结果为14、原码、反码、补码数值在计算机中表示形式为机器数,计算机只能识别0和1,使用的是二进制,而在日常生活中人们使用的是十进制,正如亚里士多德早就指出的那样,今天十进制的广泛采用,只不过我们绝大多数人生来具有10个手指头这个解剖学事实的结果.尽管在历史上手指计数(5,10进制)的实践要比二或三进制计数出现的晚.(摘自有空大家可以看看哦,很有意思的).为了能方便的与二进制转换,就使用了十六进制(2 4)和八进制(23).下面进入正题. 数值有正负之分,计算机就用一个数的最高位存放符号(0为正,1为负).这就是机器数的原码了.假设机器能处理的位数为8.即字长为1byte,原码能表示数值的范围为 (-127-0 +0127)共256个. 有了数值的表示方法就可以对数进行算术运算.但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下: 假设字长为8bits ( 1 ) 10- ( 1 )10 = ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001)原 + (10000001)原 = (10000010)原 = ( -2 ) 显然不正确. 因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上,对除符号位外的其余各位逐位取反就产生了反码.反码的取值空间和原码相同且一一对应. 下面是反码的减法运算: ( 1 )10 - ( 1 ) 10= ( 1 ) 10+ ( -1 ) 10= ( 0 )10 (00000001) 反+ (11111110)反 = (11111111)反 = ( -0 ) 有问题. ( 1 )10 - ( 2)10 = ( 1 )10 + ( -2 )10 = ( -1 )10 (00000001) 反+ (11111101)反 = (11111110)反 = ( -1 ) 正确 问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的.(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大). 于是就引入了补码概念. 负数的补码就是对反码加一,而正数不变,正数的原码反码补码是一样的.在补码中用(-128)代替了(-0),所以补码的表示范围为: (-1280127)共256个. 注意:(-128)没有相对应的原码和反码, (-128) = (10000000) 补码的加减运算如下: ( 1 ) 10- ( 1 ) 10= ( 1 )10 + ( -1 )10 = ( 0 )10 (00000001)补 + (11111111)补 = (00000000)补 = ( 0 ) 正确 ( 1 ) 10- ( 2) 10= ( 1 )10 + ( -2 )10 = ( -1 )10 (00000001) 补+ (11111110) 补= (11111111)补 = ( -1 ) 正确 所以补码的设计目的是: 使符号位能与有效值部分一起参加运算,从而简化运算规则. 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计 所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、C等其他高级语言中使用的都是原码。一、原码、反码、补码的定义1、原码的定义小数原码的定义X原 =X 0X 11 X1 X 0例如: X=+0.1011 , X原= 01011 X=0.1011 X原= 11011整数原码的定义 X原 =X 0X 2n2nX 2n X 02、补码的定义小数补码的定义X补 =X 0X 12 X 1 X 0例如: X=+0.1011, X补= 01011 X=0.1011, X补= 10101 整数补码的定义 X补 =X 0X 2n2n+1X 2n X 03、反码的定义小数反码的定义X反 =X 0X 122n-1X 1 X 0例如: X=+0.1011 X反= 01011 X=0.1011 X反= 10100 整数反码的定义 X反 =X 0X 2n2n+11X 2n X 04.移码:移码只用于表示浮点数的阶码,所以只用于整数。 移码的定义:设由1位符号位和n位数值位组成的阶码,则 X移=2n + X -2nX 2n例如: X=1011 X移=11011 符号位“1”表示正号 X=1011 X移=00101 符号位“0”表示负号 移码与补码的关系: X移与X补的关系是符号位互为反码,例如: X=1011 X移=11011 X补=01011 X=1011 X移=00101 X补=10101 移码运算应注意的问题:对移码运算的结果需要加以修正,修正量为2n ,即对结果的符号位取反后才是移码形式的正确结果。移码表示中,0有唯一的编码100000,当出现00000时(表示2n),属于浮点数下溢。二、补码加、减运算规则1、运算规则XY补= X补 Y补XY补= X补 Y补若已知Y补,求Y补的方法是:将Y补的各位(包括符号位)逐位取反再在最低位加1即可。例如:Y补= 101101 Y补= 0100112、溢出判断,一般用双符号位进行判断:符号位00 表示正数 11 表示负数结果的符号位为01时,称为上溢;为10时,称为下溢例题:设x=0.1101,y=0.0111,符号位为双符号位用补码求x+y,xyx补+y补=00 1101+11 1001=00 0110xy补=x补+y补=00 1101+00 0111=01 0100结果错误,正溢出三、原码一位乘的实现:设X=0.1101,Y=0. 1011,求X*Y解:符号位单独处理, x符 y符数值部分用原码进行一位乘,如下图所示:高位部分积低位部分积/乘数说明 0 0 0 0 0 01 0 1 1起始情况) 0 0 1 1 0 1乘数最低位为1,+X 0 0 1 1 0 1 0 0 0 1 1 01 1 0 11(丢)右移部分积和乘数) 0 0 1 1 0 1乘数最低位为1,+X 0 1 0 0 1 1 0 0 1 0 0 11 1 1 01(丢)右移部分积和乘数) 0 0 0 0 0 0乘数最低位为0,+0 0 0 1 0 0 1 0 0 0 1 0 01 1 1 10(丢)右移部分积和乘数) 0 0 1 1 0 1乘数最低位为1,+X 0 1 0 0 0 1 0 0 1 0 0 01 1 1 11(丢)右移部分积和乘数四、原码一位除的实现:一般用不恢复余数法(加减交替法)部分积低位部分积 附加位操作说明 0 0 0 0 0 0 1 0 1 1起始情况) 0 0 0 0 0 0乘数最低位为1,+X 0 0 0 0 0 0 0 0 0 0 0 01 1 0 11(丢)右移部分积和乘数) 1 1 0 0 1 1乘数最低位为1,+X 0 1 0 0 1 1 0 0 1 0 0 11 1 1 01(丢)右移部分积和乘数) 0 0 0 0 0 0乘数最低位为0,+0 0 0 1 0 0 1 0 0 0 1 0 01 1 1 10(丢)右移部分积和乘数) 0 0 1 1 0 1乘数最低位为1,+X 0 1 0 0 0 1 0 0 1 0 0 01 1 1 11(丢)右移部分积和乘数2.5 浮点运算与浮点运算器一、浮点数的运算规则1、浮点加减法的运算步骤设两个浮点数 X=Mx2Ex Y=My2Ey实现XY要用如下5步完成:对阶操作:小阶向大阶看齐进行尾数加减运算规格化处理:尾数进行运算的结果必须变成规格化的浮点数,对于双符号位的补码尾数来说,就必须是001 或110的形式若不符合上述形式要进行左规或右规处理。舍入操作:在执行对阶或右规操作时常用“0”舍“1”入法将右移出去的尾数数值进行舍入,以确保精度。判结果的正确性:即检查阶码是否溢出若阶码下溢(移码表示是000),要置结果为机器0;若阶码上溢(超过了阶码表示的最大值)置溢出标志。例题:假定X=0 .0110011*211,Y=0.1101101*2-10(此处的数均为二进制) ? 计算X+Y;解:X浮: 0 1 010 1100110 Y浮: 0 0 110 1101101 符号位 阶码 尾数第一步:求阶差: E=|1010-0110|=0100第二步:对阶:Y的阶码小, Y的尾数右移4位 Y浮变为 0 1 010 0000110 1101暂时保存第三步:尾数相加,采用双符号位的补码运算 00 1100110 +00 0000110 00 1101100第四步规格化:满足规格化要求第五步:舍入处理,采用0舍1入法处理故最终运算结果的浮点数格式为: 0 1 010 1101101,即X+Y=+0. 1101101*2102、浮点乘除法的运算步骤阶码运算:阶码求和(乘法)或阶码求差(除法) 即 Ex+Ey移= Ex移+ Ey补 ExEy移= Ex移+ Ey补浮点数的尾数处理:浮点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论