您的位置:首页 > 其它

原码补码反码以及位运算符

2016-04-18 16:12 501 查看

原码

原码是一种计算机中对数字的二进制定点表示方法。在数值前增加一位符号位,正数该位为0,负数该位为1,其余为表示值。如:+3的原码为00000011,-3的原码为10000011.

原码是人脑最容易理解和计算的表示方式,但是原码不能直接参加运算。

注意:数0的原码有两种形式:

[+0]原=00000000

[-0]原=10000000

反码

正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。

如:+3的反码为00000011,-3的反码为11111100.

注意:数0的反码也有两种形式,即

[+0]反=00000000

[- 0]反=11111111

由于补码更能有效表现数字在计算机中的形式,所以多数计算机一般都不采用反码表示数。

补码

补码的表示方法是:

正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

如:+3的补码为00000011,-3的补码为11111101.

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。

注意:1.对一个整数的补码再求补码,等于该整数自身。 2.补码的正零与负零表示方法相同。

位运算符

位运算符用来对二进制位进行操作,操作数只能为整型和字符型数据。

1.按位与运算(&)

按位与运算符”&”是双目运算符。 其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1 ,否则为0。参与运算的数以补码方式出现。(a与1做位与运算,若结果是1,则 a是奇数;将 a与1做位与运算,若结果是0,则 a是偶数。)

如:5&9=1

00101 (5的二进制补码)

&

01001(9的二进制补码)

=00001(相与后)

2.按位或运算(|)

按位或运算符“|”是双目运算符。 其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

如:9|5=13

01001

|

00101

=01101

3.按位异或运算(^)

按位异或运算符“^”是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现。(对于任意一个整数a^a=0)

如:9^5=12

01001

^

00101

=01100

4.求反运算(~)

求反运算符~为单目运算符,具有右结合性。 其功能是对参与运算的数的各二进位按位求反

如:~(1001)=0110

5.左移运算(<<)

左移运算符“<<”是双目运算符。左移n位就是乘以2的n次方。 其功能把“<<”左边的运算数的各二进位全部左移若干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补0。

如: a<<4 指把a的各二进位向左移动4位。如a=00000011(十进制3),左移4位后为00110000(十进制48)。

6.右移运算

右移运算符“>>”是双目运算符。右移n位就是除以2的n次方。其功能是把“>>”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

如:a>>2 表示把a的各二进位向右移动两位。如a=00001111(十进制15),右移2位后为00000011(十进制3)。

注意:对于有符号数,在右移时,符号位将随同移动。当为正数时, 最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: