java中位运算System.out.println(6&3); //2 0010 且System.out.println(6|3); //7 0111 或System.out.println(6^3); //5 0101 异或System.out.println(6>>2); //1 0000 将0110 向右移动两位System.out.println(-6>>2); //-2 0000 将0110 向右移动两位System.out.println(6<<3); //48 0011 0000 向左移动三位 6*2^3System.out.println(6>>>2); //1 Java也添加了一种“无符号”右移位运算符(>>>),它使用...
创建一个类,通过位运算中的”^"异或运算符把字符串与一个指定的值进行异或运算,从而改变字符串每个字符的值,这样就可以得到一个加密后的字符串。当把加密后的字符串作为程序输入内容,再与那个指定的值进行异或运算,实现把加密后的字符串还原为原有字符串的值。?1234567891011121314importjava.util.Scanner;publicclassExample { publicstaticvoidmain(String[] args) { Scanner scan = newScanner(System.in); ...
之前一直以为,在js的位运算中,双精度浮点数在内部会先被转成32位整数,再执行位运算,然后再转为64位数值,因此效率极低。今天实验发现,对浮点执行位运算只会导致数值不准确,而不会导致效率低下,相比乘法,左移位要快66%(其实就是浮点运算与整数运算的差距)。 以下结果在 IE 7 ~ IE 10 上测试得出 技巧1:移位运算比乘除法快(当因数是2的幂数) b = a << 1;//大概快 6.8%技巧2:奇偶判断 b = a & 1;//0位与1相与,相比于 x...
在学习Java运算时,补充学习Java位运算。Java位运算位运算都是针对整数的补码进行位运算。& 按位与运算先将整数转换为补码 ,然后执行按位与运算,最后将结果返回为十进制,它有如下几个规律:(1)正数&其他数=正数 考虑最高位为0,按位与都为0(2)偶数&其他数=偶数 考虑最低位为0,按位与都为0(3)0&其他数=0 按位与后位数全是0(4)1&奇数=1,1&偶数=0 通过它可以快速判断一个数是奇数还是偶数| 按位或运算先将整数转换为补码...
/* 位运算 二进制 补码 基本的 &(与) |(或) ^(异或) ~(按位取反) 连接的是数值(除了布尔类型的) 一般我们做案例,用的数据都是采用整数 (int)*/class OperatorDemo{
public static void main(String[] args) {
int a = 3;
int b = 4;
//位与&
System.out.println(a&b);//0
//位或
System.out.println(a|b);//7
//位异或
System.out.println(a^b);//7
//按位取反
System.out.pri...
/** * 功能: * 位运算符,原码、反码、补码规则: * 1.二进制的最高位是符号位:0表示正数,1表示负数 * 2.正数的原码、反码、补码都一样 * 3.负数的反码=它的原码符号位不变,其他位取反 * 4.负数的补码=它的反码+1 * 5.0的反码,补码都是0 * 6.java没有无符号数,换言之,java中的数都是有符号的 * 7.在计算机运算时候,都是以补码的方式来运算的 * * 位运算规则: * 按位与&:两位全为1,结果为1 * 按位或|:两位有一个为1,结...
1、原码、反码、补码之间的转换
计算机存储都是按补码进行存储的,正数的补码和原码一样,对负数进行位运算的时候要先算出它的补码。
1.1正数的原码、反码、补码都是相同的。
1.2 负数的反码:最高位符号位不变,其他位置取反负数的补码:反码加1就得到补码
2.位运算
&:按位与
0&1 = 0
0&0 = 0
1&1 = 1
例子: 5 & 9 = 1
| :按位或
0 | 0 = 0
1 | 0 = 1
1 | 1 = 1
例子:5 ^ 9 = 12
~ :按位非
按位非首先获取补码,对...
1.与运算符--“&”两个操作数中位都为1,结果才为1,否则结果为0
2.或运算符--“|”两个位只要有一个为1,那么结果就是1,否则就为0
3.非运算符--“~”如果位为0,结果是1,如果位为1,结果是0
4.异或运算符--“^”两个操作数的位中,相同则结果为0,不同则结果为1
Java提供的位运算符有:左移( << )、右移( >> ) 、无符号右移( >>> ) 、位与( & ) 、位或( | )、位非( ~ )、位异或( ^ ),除了位非( ~ )是一元操作符外,其它的都是二元操作符。
1、左移( << )
Test1、将5左移2位:public class Test {
public static void main(String[] args) {
System.out.println(5<<2);//运行结果是20
}
}
运行结果是20,但是程序是怎样执行的呢?首先会将5转为2进制表示形式(java中,整数默认就是int类型,也...
byte存储范围,表示范围
我们知道byte代表1个字节,数据存储的范围:[0x00, 0xFF]。byte变量表示值的范围:[-128, 127]。
下面这段代码并不是输出128,而是输出-128,因为byte变量表示值的范围为[-128, 127]。128刚刚好超出上界127有1单位,溢出为-128。
300对应byte值也不是300,而是按byte长度(1字节)截取存储内容后的值。
可以看到,300 = 0b100101100,截取1byte长度后,值为0b00101100,也就有 b = 0b00101100 => b = 44
by...
1.^(亦或运算) ,针对二进制,相同的为0,不同的为1public static void main(String[] args) {System.out.println("2^3运算的结果是 :"+(2^3));//打印的结果是: 2^3运算的结果是 :1
}2 =======>0010
3 =======>0011
2^3就为0001,结果就是1
2.&(与运算) 针对二进制,只要有一个为0,就为0
还是上述的例子public static void main(String[] args) { System.out.println("2&3运算的结果是 :"+(2&3)); //打印的...
Java位运算
与:[ & ]: 同1则1 或:[ | ]:有1则1 非:[ ~ ]:0变1、1变0 异或:[ ^ ]:相同为0,不同为1. 左移: <<: 按二进制形式把所有的数字向左移动对应的位数,高位移出(舍弃),低位的空位补零。 右移: >>: 按二进制形式把所有的数字向右移动对应的位数,低位移出(舍弃),高位的空位补零。
题目给定两个字符串 s 和 t,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。示例 1: 输入:s = “abcd”, t = “abcde” 输出:“e” 解释:‘e’ 是那个被添加的字母。方法一:位运算
我们知道a^0=a; a ^a =0;所以如果是多余的字符,则结果不会为0,因为是在s的基础上进行新增一个字符,所以除开新增的字符,在异或过程中,两两抵消,最后剩下的就是新增的字符了...
位运算符十进制与二进制
小例子:10(二进制)—> 十进制10 = 0 * 2^0 + 1 * 2^1 = 2十进制转换为二进制, 大家肯定也会,这里不多说了。
但是这里有一点是需要注意的就是计算机对于数字的表示问题。
机器数与机器数真值机器数 一个数在计算机中的二进制表示形式,叫做这个数的机器数。机器数是带符号的,在计算机用机器数的最高位存放符号,正数为0,负数为1。 比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是0000 0...
一、左位移<<
<< 表示左位移,不分正负数,低位补0 ; 计算机都是以补码进行运算的 :?补码5的原码、反码、补码:
5的原码 0000 01015的反码 0000 01015的补码 0000 0101
-5的原码、反码、补码:
-5的原码 1000 0101-5的反码 1111 1010-5的补码 1111 1011
1、5 << 1;
5的原码 0000 01015的补码 0000 01015 <<1 0000 1010=10
byte b=5;
byte result= (byte) (b << 1);
System.out.println("左移1位后十进制:" + result + ", 左移1位...