当前位置:首页 >> 高中教育 >> 二进制运算符

二进制运算符


二进制基础知识
1、区别逻辑运算和算术运算 算术运算有可能产生进位,而逻辑运算按位运算不会产生进位。 例如:1b+1b=10b 1b or 1b =1b 1b*10b=10b 1b and 10b=10b 01b and 10b=00b 2、逻辑运算: Not 非, And 与, Or 或, Xor 异或 , Eqv 等价, Imp 蕴含 F,其他情况为 T 请注意 1

、not,and,or 的其他表示方式,如∧∨∪∩┌ 2、以下 T(1),F(0)互用,因为逻辑运算是按位运算 Not: Not T=F Not F=T And: T and T=T Or: T or T=T Xor: 用来对两个表达式进行逻辑互斥或运算。 Xor 是“异或”, 意思就是不相同的进行或运算, 那么相同的就不进行或运算了.

T

Imp F →

T and F=F

F and T=F F and F=F

T or F=T

F or T=T

F or F=F

语法 [result =] expression1 Xor expression2 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 1 1 | 0 | 1 | 0 | 1 | 0 | 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 例子:在计算机环境下:
10=0000000000001010 eqv 2=0000000000000010 cn=1111111111110111=-9 -----------------------

1 eqv 0=0

1 eqv 1=1

Imp: 蕴含 T Imp F → F,其他情况为 T 只有 1 imp 0=0 其他情况都是 1。 例子:在计算机环境下:
1=0000000000000001 imp 2=0000000000000010 cn=1111111111111110=-2 -----------------------

3、位操作: shl 逻辑左移,shr 逻辑右移 例如:2 SHR1 表示 2 按位右移一位结果为 1 4、原码、反码、补码 数值在计算机中表示形式为机器数,计算机只能识别 0 和 1,使用的是二进制,而在 日常生活中人们使用的是十进制,"正如亚里士多德早就指出的那样,今天十进制 的广泛采用,只不过我们绝大多数人生来具有 10 个手指头这个解剖学事实的结 果.尽管在历史上手指计数(5,10 进制)的实践要比二或三进制计数出现的晚."(摘 自<<数学发展史>>有空大家可以看看哦~,很有意思的).为了能方便的与二进制 转换,就使用了十六进制(2 4)和八进制(23).下面进入正题. 数值有正负之分,计算机就用一个数的最高位存放符号(0 为正,1 为负).这就是机 器数的原码了.假设机器能处理的位数为 8.即字长为 1byte,原码能表示数值的范 围为 (-127~-0 +0~127)共 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),所以补码的表示范围为:

(-128~0~127)共 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 1- X 0≤X <1 -1 < X ≤ 0

例如: X=+0.1011 , [X]原= 01011 X=-0.1011 [X]原= 11011 ②整数原码的定义 [X]原 = 2、补码的定义 ①小数补码的定义 [X]补 = X 2+ X 0≤X <1 -1 ≤ X < 0 X 2 -X
n

0≤X <2n - 2n < X ≤ 0

例如: X=+0.1011, [X]补= 01011 X=-0.1011, [X]补= 10101

②整数补码的定义 [X]补 = X n+1 2 +X 0≤X <2n - 2n ≤ X < 0

3、反码的定义 ①小数反码的定义 [X]反 = X 2-2n-1-X 0≤X <1 -1 < X ≤ 0

例如:

X=+0.1011 X=-0.1011

[X]反= 01011 [X]反= 10100

②整数反码的定义 [X]反 = X n+1 2 -1-X 0≤X <2n - 2n < X ≤ 0

4.移码:移码只用于表示浮点数的阶码,所以只用于整数。 ①移码的定义:设由 1 位符号位和 n 位数值位组成的阶码,则 [X]移=2n + X -2n≤X ≤ 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 有唯一的编码——1000…00,当出现 000…00 时(表示- 2n),属于浮点数下溢。

二、补码加、减运算规则 1、运算规则 [X+Y]补= [X]补+ [Y]补 [X-Y]补= [X]补+ [-Y]补

若已知[Y]补,求[-Y]补的方法是:将[Y]补的各位(包括符号位)逐位取反再在最 低位加 1 即可。 例如:[Y]补= 101101 [-Y]补= 010011 2、溢出判断,一般用双符号位进行判断: 符号位 00 表示正数 11 表示负数 结果的符号位为 01 时,称为上溢;为 10 时,称为下溢 例题:设 x=0.1101,y=-0.0111,符号位为双符号位 用补码求 x+y,x-y [x]补+[y]补=00 1101+11 1001=00 0110 [x-y]补=[x]补+[-y]补=00 1101+00 0111=01 0100 结果错误,正溢出 三、原码一位乘的实现: 设 X=0.1101,Y=-0. 1011,求 X*Y 解:符号位单独处理, x 符+ y 符 数值部分用原码进行一位乘,如下图所示:

高位部分积 000000 +) 0 0 1 1 0 1 001101 000110 +) 0 0 1 1 0 1 010011 001001 +) 0 0 0 0 0 0 001001 000100 +) 0 0 1 1 0 1 010001 001000

低位部分积/乘数 说明 起始情况 1011 乘数最低位为 1,+X

1101

1(丢) 右移部分积和乘数 乘数最低位为 1,+X

1110

1(丢) 右移部分积和乘数 乘数最低位为 0,+0

1111

0(丢) 右移部分积和乘数 乘数最低位为 1,+X

1111

1(丢) 右移部分积和乘数

四、原码一位除的实现:一般用不恢复余数法(加减交替法) 部分积 000000 +) 0 0 0 0 0 0 000000 000000 +) 1 1 0 0 1 1 010011 001001 +) 0 0 0 0 0 0 001001 000100 +) 0 0 1 1 0 1 010001 001000 低位部分积 附加 操作说明 位 起始情况 1011 乘数最低位为 1,+X

1101

1(丢) 右移部分积和乘数 乘数最低位为 1,+X

1110

1(丢) 右移部分积和乘数 乘数最低位为 0,+0

1111

0(丢) 右移部分积和乘数 乘数最低位为 1,+X

1111

1(丢) 右移部分积和乘数

§ 2.5 浮点运算与浮点运算器 一、浮点数的运算规则 1、浮点加减法的运算步骤 设两个浮点数 X=Mx※2Ex Y=My※2Ey 实现 X±Y 要用如下 5 步完成: ①对阶操作:小阶向大阶看齐 ②进行尾数加减运算 ③规格化处理: 尾数进行运算的结果必须变成规格化的浮点数,对于双符号位的 补码尾数来说,就必须是 001×××…×× 或 110×××…××的形式 若不符合上述形式要进行左规或右规处理。 ④舍入操作: 在执行对阶或右规操作时常用“0”舍“1”入法将右移出去的尾数数值 进行舍入,以确保精度。 ⑤判结果的正确性:即检查阶码是否溢出 若阶码下溢(移码表示是 00…0),要置结果为机器 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*210 2、浮点乘除法的运算步骤 ①阶码运算:阶码求和(乘法)或阶码求差(除法) 即 [Ex+Ey]移= [Ex]移+ [Ey]补 [Ex-Ey]移= [Ex]移+ [-Ey]补 ②浮点数的尾数处理:浮点数中尾数乘除法运算结果要进行舍入处理 例题:X=0 .0110011*211,Y=0.1101101*2-10 求 X※Y 解:[X]浮: 0 1 010 1100110 [Y]浮: 0 0 110 1101101 第一步:阶码相加 [Ex+Ey]移=[Ex]移+[Ey]补=1 010+1 110=1 000 1 000 为移码表示的 0 第二步:原码尾数相乘的结果为: 0 10101101101110 第三步:规格化处理:已满足规格化要求,不需左规,尾数不变,阶码不变。 第四步:舍入处理:按舍入规则,加 1 进行修正 所以 X※Y= 0.1010111※2+000


更多相关文档:

二进制运算符

二进制运算符 位运算符: &(按位与) |(按位或) ^(按位异或) ~(按位取反) <<(按位左移) >>(有符号的按位右移) >>>(无符号的按位右移) 补充...

二进制运算符

二进制运算符_高中教育_教育专区。二进制基础知识 1、区别逻辑运算和算术运算 算术运算有可能产生进位,而逻辑运算按位运算不会产生进位。 例如:1b+1b=10b 1b ...

二进制的运算法则

1.2 微型计算机运算基础 1.2.1 二进制数的运算方法 电子计算机具有强大的运算...二进制运算符 8页 免费 二进制运算 暂无评价 10页 免费 二进制逻辑运算详解...

二进制运算符解惑

二进制运算符解惑_计算机软件及应用_IT/计算机_专业资料。按位与运算符(&) 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1&...

bit二进制操作符

bit二进制操作符_IT/计算机_专业资料。按位与运算符(&) 按位与运算符( 参加运算的两个数据,按二进制位进行“与”运算。 运算规则:0&0=0; 0&1=0; 1&0...

二进制运算法则

二进制运算法则_理学_高等教育_教育专区。数学二进制运算法则百科名片 百科名片 莱布尼兹也是第一个认识到二进制记数法重要性的人,并系统地提出了二进制数的运算法则...

二进制数运算

二进制运算_理学_高等教育_教育专区。1.2.1 二进制数的运算方法 电子计算机具有强大的运算能力,它可以进行两种运算:算术运算和逻辑 运算。 1.二进制数的算术...

二进制运算

二进制运算_六年级数学_数学_小学教育_教育专区。二进制运算 二进制是计算技术中广泛采用的一种数制。二进制数据是用 0 和 1 两个数码来 表示的数。它的基数...

位运算符主要针对二进制

运算符主要针对二进制_计算机软件及应用_IT/计算机_专业资料。JAVA 位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有...

二进制数的算术运算

一、无符号二进制数的算术运算: 1、二进制数加法: 运算规则:0+0=0,0+1=1,1+1=10(向高位进一) —逢二进一 例:计算二进制数 1010 和 0101 的和。 ...
更多相关标签:
位运算符 | 二进制运算 | 二进制运算法则 | c语言 二进制运算符 | sum of two integers | java二进制运算符 | 二进制操作符 | php 二进制运算符 |
网站地图

文档资料共享网 nexoncn.com copyright ©right 2010-2020。
文档资料共享网内容来自网络,如有侵犯请联系客服。email:zhit325@126.com