最近看HashMap源码遇到了这样一段代碼:
于是我整理学习了以下知识:
原理:给定的数循环除以2,直到商为0或者1为止将每一步除的结果的余数记录下来,然後反过来就得到相应的二进制了
比如8转二进制,第一次除以2等于4(余数0)第二次除以2等于2(余数0),第三次除以2等于1(余数0)最后餘数1,得到的余数依次是0 0 0 1
反过来就是1000,计算机内部表示数的字节长度是固定的比如8位,16位32位。所以在高位补齐java中字节码是8位的,所以高位补齐就是.
写法位(8)10=()2;
计算也很简单比如8的二进制表示位,去掉补齐的高位就是1000.此时从个位开始计算2的幂(个位是0依次往后推)乘以对应位数上的数,然后得到的值想加
于是有了(2的0次幂)*0+(2的1次幂)*0+(2的2次幂)*0+(2的3次幂)*1 = 8
129转换成二进制就是,128转换成二进制就是从高位开始比较得到,得到即128.
129转换成二进制就是,128转换成二进制就是从高位开始比较得到,得到即129.
在Java中所有数据的表示方法都是以补码的形式表示,如果没有特殊说明Java中的数据类型默认是int,int数据类型的长度是8位,一位是四个字节就是32字节,32bit.
因为高位是1所以原码为负数,负數的补码是其绝对值的原码取反末尾再加1。
因此我们可将这个二进制数的补码进行还原: 首先,末尾减1得反码:11 其次将各位取反得原码:
00 ,此时二进制转原码为38
返回值类型为布尔值的表达式洳比较运算符,可以被组合在一起构成一个更复杂的表达式这是通过逻辑运算符来实现的。逻辑运算符包括&(&&)(逻辑与)、||(逻辑或)、!(逻辑非)逻辑运算符的操作元必须是boolean型数据。在逻辑运算符中除了“!”是一元运算符之外,其他的都是二元运算符下表給出了逻辑运算符的用法和具体含义:
结果为boolean型的变量或者表达式可以通过逻辑运算符组合为逻辑表达式。
用逻辑运算符进行逻辑运算时结果如下表所示:
逻辑运算符“&&”与“&”都表示“逻辑与”,那么他们之间的区别在哪里呢从上表不难看出,当两个表达式都为true时“逻辑与”的结果才会是true。使用逻辑运算符“&”会判断两个表达式;而逻辑运算符“&&”则是针对boolean类型的类进行判断当第一个表达式为false时,则不再去判断第二个表达式直接输出结果从而节省计算时间和计算机判断的次数。通常将这两种在逻辑表达式中从左端的表达式可推斷出一个整个表达式的值称为“短路”而那些始终执行逻辑运算符的两边的表达式称为“非短路”。“&&”属于“短路”运算符而“&”則属于“非短路”运算符。
在记事本中创建类Calculation在主方法中创建整形变量,使用逻辑运算符对变量进行运算并非运算结果输出:
内容来源 --- 张学成
责任主编 --- 张河山
更多内容敬请期待明天统一时间!
变量可以使用++或--进行运算常量鈈可以,例:10++会报意外类型错误;
++和--运算符使用:单独使用时放在操作数前面和后面都一样
参与运算使用时,放在操作数前面先自增或自减,然后再参与运算;放在操作数后面先参与运算,再自增或自减
以上代码有没有问题如囿请指出,并解释
&位与运算,有0则0;|位或运算有1则1;^位异或运算,相同则0不同则1(特点:某数据被另以数据位异或两次,该数据不變);~按位取反运算符
方法三:用变量相加实现
面试题:请用最有效率的方式计算2乘以8的结果
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。