java基础(一)

   

算数运算符 (+ - * / % ++ --)

赋值运算符(+= -= *= /= %=)

关系运算符(== != >= <= > <)

逻辑运算符(&& & || | ! ^)

  位运算符(>> << >>> & | ^)

位运算符是不大好理解的一类

在位运算符之前需要将进行位运算符的两边进行进制转换 因为位运算需要在二进制中进行,而且既然提到了位这个概念,就得理解什么是位.

随便举一个数字  23 将找一个十位数转成二进制的方法是找与之相近的2的幂次方 16+4+2+1   转换为2进制就是00010111

但是这时候就得了解一下各种数据类型所占的位数:java的8种基本数据类型:整型类型:byte short int long 字符类型:char 布尔类型:boolean.

byte是一个字节,short是两个字节,int是4个字节,long是八个字节,一个字节占8位.所以 byte是8位,short是16位,int32位,long64位

char占两个字节 boolean类型只有true和false具体占几个字节我觉得也就1/8个字节一个bit.

了解了这些   那么现在就开始进行一下位运算

首先是左移运算符"<<":

  我先假设我写的数是-127~128之间的byte类型 如 23转换为二进制是  00010111

将 00010111左移一位看看是什么样子    00010111

                                                              00010111      现在我们将空位补上0 将最左边的那个0舍去 就完成了左移的操作

                                                                00101110    那么现在这个数转换为十进制 就成了2+4+8+32=46 而46恰恰是23的两倍

所以左移一位其实就相当于原来的数字乘以2 右移">>"与之同理    

                                                                00010111

                                                                  00010111    现在我们将空位补上0 将最右边的那个1舍去 就完成了右移的操作

                                                                00001011    那么将现在这个数转换为十进制 1+2+8=11 因为byte所以将小数点后省去

所以右移一位相当于原来的数字除以2 

左移和右移都比乘法和除法更有效率 因为移位耗费的是两个机器周期 而乘除都是四个机器周期 

然后在讨论一下负数的情况 在计算机组成原理课上讲过 在计算机中 我们都是以补码的形式进行计算 正数的原码  反码 补码都是一样的 在二进制中 一串数字的第一位表示的是这个数字的正负 比如举个例子:+7的二进制为00000111 -7的二进制为10000111

现在将-24这个数的原码 反码 补码来写一下 原码:10011000

                                                                     反码: 11100111  //也就是符号位不变 其余位取反0变1 1变0

                                                                     补码: 11101000  //也就是在反码的基础上 +1

将-24右移两位      11101000

                              11111010(00)     高位补了2个1低位舍了两个0

                          11111001           减一

                          10000110          符号位不变 其余各位取反    10000110的十进制 是  -6 

如果是无符号移位 >>> 输出的数字就是无符号数 1073741818

                     

             

           

                             

 

                                                   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值