今天理解的问题:如果要把int型的数据转换成short型 long型 和byte型应该怎么转换。
原本以为:short a=10S;就可以把int型的10转换成为short型的了。结果是错的
转换int型的为Short 和byte要进行强制转换。Short a=short(128); byte a=byte(128);
Long 特殊:只需要在int型的数后面直接加L;
今天学习的有进制转换:
二进制在计算机中大量使用
十六进制在表示颜色时经常使用
不管什么进制都是逢进制数写0进1
二进制的1+1=10 八进制 1+7=010 十六进制 1+F=0X10
二进制转换为八进制:每三位写成一个八进制的数
二进制转换为16进制:每四位转换为一个16进制
^运算:a^a=0 0^a=a a^b^b=a
交换两个数:除了引入变量还可以用位运算
引入变量:class changedata{
public static void main(String [] args){
int a=10;
int b=6;
System.out.println(a+" "+b);
int temp=a;
a=b;
b=temp;
System.out.println(a+" "+b);
}
}
class changedata{
public static void main(String [] args){
用异或交换两个数: //一个数和另一个数异或两次还是这个数本身 //一个数和他本身疑惑是0//一个数和0异或还是这个数本身
int a=10;
int b=6;
System.out.println(a+" "+b);
a=a^b;
b=a^b;//b=a^b^b=a
a=a^b;//a=a^b^a=b
System.out.println(a+" "+b);
}
}
按位异或的运算规则:不同才为1
正数+负数=0;
负数=正数取反+1
切记int是32位的必须够32位
0000-0000 0000-0000 0000-0000 0000-0010 2
1111-1111 1111-1111 1111-1111 1111-1101取反
+1
1111-1111 1111-1111 1111-1111 1111-1110 -2
如果给定负数不知具体值。就求出对应正数?
(负数-1)再取反
1111-1111 1111-1111 1111-1111 1111-1110
-1
1111-1111 1111-1111 1111-1111 1111-1101
0000-0000 0000-0000 0000-0000 0000-0010 按位取反
&:按位与
运算法则:只有当两个数都为1时才是1;当有一个是零时就是0
|:按位或
运算法则:当一个数为1时就为1
^:按位异或
运算法则:当两个数不同时为1
一般用来加密:对称加密解密
class secret{
public static void main(String [] args){
int b=10;
int ps=10000100;
int jiami=b^ps;
System.out.println("jiami="+jiami);
int jiemi=jiami^ps;//用什么加密就用什么解密
System.out.println("jiemi="+jiemi);
}
}
<<:左移:不分正数和负数规则都一样
M<<2 意思是M左移两位
左移n位相当于乘以2^n
左移在后面补零:每移动 0~31就一次循环 当M<<32时就又变成了当前数......
>>:右移 :得分正负数 规则不一样
M>>2 意思是M右移两位
右移n位相当于除以2^n
正数右移:在前面补零 最小是0
负数右移:移多少位就在前面补多少位的1
当一个正数不是2的n次幂;那么左移后的结果取整
负数右移怎么办:
负数右移时在前面补1 最小是-1
负数右移秉承的原则是余数必须是正数
不管正数负数右移都0~32一循环
class BitDemo10{
public static void main(String[] args){
// 第一个局部变量是args
//show();
//int i=0;
//i=i++;
//System.out.println(i);
//iconst_0 将0放到栈顶
//istore_1 将int值存到第二个局部变量中 i=0;
// iload_1 将第二个局部变量的值放到栈顶 0
// iinc i=1;
//istore_1 将栈顶的元素给第二个局部变量i=0;
int i=0;
int c=i++;
System.out.println(i);
System.out.println(c);
// 将0放到栈顶
// istore_1 将栈顶的元素赋值给第二个局部变量 i=0;
// iload_1 将第二个局部变量的值放到栈顶 0
// iinc 1,1 i=1;
// istore_2 将栈顶的元素赋值给第三个局部变量c=0;
// System.out.println(iload_1); i=1;
// iload_1 第二个局部变量
//System.out.println(iload_2);
// iload_2
}
public static void show(){
//int i=0;
//int c=i++;
//System.out.println(i);
// iconst_0 将常量0放到栈顶
// istore_0 将0给i赋值。
// iload_0 将i的值放到栈顶,现在栈顶是0
// iinc i=0+1=1;
// istore_1 将栈顶的给第二个局部变量 c=0;
// iload_0 第一个局部变量,指的是i
// c是0,i=1
// int i=0;
//i=i++;
//System.out.println(i);
//iconst_0 将常量0放到栈顶 0
//iconst_0 将栈顶的值赋值给第一个变量 i=0;
// iload_0 将第一个局部变量的值放到栈顶 0
// iinc i=0+1;i=1;
// iconst_0 将栈顶的元素给第一个局部变量i=0;
}
}