原码
原码是一种计算机中对数字的二进制定点表示方法。在数值前增加一位符号位,正数该位为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。