进制与位运算(一)
来源:互联网 发布:偷窥网络在线视频 编辑:程序博客网 时间:2024/06/07 18:24
进制
我们都知道计算机使用的是二进制运算。以byte为例,8位能表达的范围从(00000000)2~(11111111)2,转成十进制就是0~255,但由于还有负数的存在,byte实际表达的范围是-128~127。在计算机里,对于有符号的数据类型,会把最高位做为符号位,如果为1,则为负数。负数通常有三种表达方式,原码,反码与补码。
原码:把符号位设为1。如11的二进制是00001011,-11就是10001011。
反码:所有数字取反。-11是11110100。
补码:在反码的基础上加1。-11是11110101。使用补码的好处包括,0和-0的表示相同,正负数可以直接进行加减法运算。现代计算机都是使用补码来表示负数。
二进制正负转换快速算法:最右边的1不变,前面几位取反。
对byte进行运算时,会将byte转换为int再进行运算,因此要注意byte的取值范围,超出范围的话会出现错误的结果。如:
byte x=(byte)128;此时的x输出为-128
位运算符
&:按位与。
|:按位或。
~:按位非。
^:按位异或。(又称半加法运算,相加取后一位,如1+1=10,取0)
<<:左位移运算符。
>>:右位移运算符。
>>>:无符号右移运算符。
一般而言左位移n位就是乘以2的n次方,右位移n位就是除以2的n次方。但是负数的右位移n位是除以2的n次方再减一。如,
int n=-11;int c=n<<2;int d=n>>1;此时c=44,d=-6。
>>是带符号的位移
正数则高位补0,负数则高位补1。
>>>是无符号的位移
始终补0
以byte位例
11的二进制00001011,右位移两位,00000010。2
-11的二进制11110101,右位移两位,11111101。-3
-11无符号右移两位,00111101。61
0 0
- 进制与位运算(一)
- c语言中的位运算与进制(一)
- 进制运算与位运算
- 进制转换与位运算
- 进制转换与位运算
- 进制与位运算(二)
- java位运算(一),了解二进制与八进制,十进制以及16进制的转换
- 位运算与组合搜索(一)
- 46 进制与位运算(上)47 进制与位运算(下)
- 位运算艺术(一)
- 位运算艺术(一)
- 位运算艺术(一)
- 位运算(一)
- 一、C++ 位运算
- 进制转换与Java的位运算操作
- java学习笔记(一)----位运算符与逻辑运算符
- 赋值运算与位运算
- 位运算符与位运算
- expdp/impdp 参数说明,中英对照
- finereport 的使用
- Centos6.5编译安装python3.5.2
- cenos下常用命令
- loadrunner示例程序启动
- 进制与位运算(一)
- 访问discuz报SELECT * FROM common_process WHERE `processid`='DZ_CRON_15'错误
- spark厦大----逻辑斯蒂回归分类器--spark.ml
- GIt简单入门
- 配置Java Tomcat Maven环境变量
- 从一个MySQL left join优化的例子加深对查询计划的理解
- MITgcm 编译安装测试说明
- Python:input输入中文,print输出乱码
- DAO模式中的实体类