java第四天

今天理解的问题:如果要把int型的数据转换成short型   long型 和byte型应该怎么转换。

原本以为:short a=10S;就可以把int型的10转换成为short型的了。结果是错的

转换int型的为Short byte要进行强制转换。Short a=short(128);  byte a=byte(128);

Long 特殊:只需要在int型的数后面直接加L

 

今天学习的有进制转换:

二进制在计算机中大量使用

十六进制在表示颜色时经常使用

不管什么进制都是逢进制数写01

二进制的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

切记int32位的必须够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

当一个正数不是2n次幂;那么左移后的结果取整

 

负数右移怎么办:

负数右移时在前面补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   0i赋值。

// iload_0 i的值放到栈顶,现在栈顶是0

// iinc   i=0+1=1;

//  istore_1 将栈顶的给第二个局部变量 c=0;

// iload_0  第一个局部变量,指的是i

// c0i=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;

}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值