原码补码反码以及位运算符
2016-04-18 16:12
543 查看
原码
原码是一种计算机中对数字的二进制定点表示方法。在数值前增加一位符号位,正数该位为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。
相关文章推荐
- php连接sqlserver数据库服务器(或者称mssql数据库)的几种方法
- http://netfilter.org/ 读后感
- 栈和堆
- java 根据二叉树前序 ,中序求后续
- 在下拉列表框里显示datastore里的服务内容
- Handler、Loop、MessageQueue的关系
- 【项目管理】“十三五”中国要上的100个大项目
- 191. Number of 1 Bits
- Hadoop的初识
- 剑指offer之面试题10:二进制中1的个数
- 网络中出现TCP、UDP粘包、分包的两点解决办法
- iOS - 社交分享- weibo分享
- java 里面的string 和byte[] 怎么互转?
- 非常赞的前端框架 framework7.io
- mysql 与 oracle 比较(一)group by 容易产生的误解
- Effective C++笔记(三):资源管理
- Frament 方法
- android判断是否为手机号码,隐藏中间4位
- 数据结构之排序查找
- 显示文件的某几行 某一行