1.MAC:网卡物理地址(内存中占48位,十六进制表示)
00-1D-0F-1A-5A-BE
2.IP地址:(内存中占32位,十进制表示)
192.168.123.41
3.计算机起始时间:1970.01.01
byte,short,char按照int运算
i++,后++,先将i的值作为整个表达式的值,然后将i增加1.
++i,先++,先将i增加1,然后将i的值作为整个表达式的值.
各种运算符
package day03;
public class LogicalDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int age = 12;
char sex = '男';
boolean isChild = age < 14; // true
boolean isMan = sex == '男'; // true
boolean isBoy = isChild && isMan;// true,&&逻辑与
boolean isGirl = isChild && !isMan;// false,!逻辑非
boolean isKid = isBoy || isGirl; // true,||逻辑或
System.out.println(isGirl);
// && 与 & 和
// &&大部分情况下用
int i = 1;
if (i != 1 && (i++) == 2) { // &&短路,不运行(i++)==2
System.out.println(i);// 不运行
}
System.out.println(i);// 1
if (i != 1 & (i++) == 2) { // &非短路,运行(i++)==2
System.out.println(i);// 不运行
}
System.out.println(i);// 2
// || 与 | 或
i = 1;
if (i == 1 || (i++) == 2) { // 短路,只执行i==1
System.out.println(i);// 1
}
if (i == 1 | (i++) == 2) { // 非短路,所以表达式都检查
System.out.println(i);// 2
}
int a=1;
a=a++; //后加加; 首先先赋值左边a=1,然后后加加a++=2,再然后a冲减回1;
System.out.println(a); //1
/*
* 也可以将写成:
* int a=1;
* a=
* a+1;
* System.out.println(a);
*
* 在int a所在行加入断点->调试,可以直观的看到a=a++;的运行顺序;
*/
int b=1;
b=a++;//后加加;先赋值后b=1,后加加a=2;
System.out.println(a);//2
System.out.println(b);//1
}
}
package day03;
public class LongDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
long max=0x7fffffffffffffffL;//1个7,15个f,long类型max,后缀为L/l
long years=max/1000/60/60/24/365;
//1秒=1000毫秒,max是long类型,1000等数字默认是int类型,计算后自动转换为long类型
System.out.println(years); //292471208
long now=System.currentTimeMillis();
//系统当前时间毫秒数,从计算机起始时间(1970.01.01)算起
System.out.println(now); //1389074584390,约44年
long year=1970+now/1000/60/60/24/365;
//不能使用int year,因为now为long类型;粗略计算,没考虑闰年
System.out.println(year); //2014,当前年份
int year1=1970+(int)now/1000/60/60/24/365;
System.out.println(year1);//1970,错误,因为优先对now进行int类型转换造成溢出
int year2=1970+(int)(now/1000/60/60/24/365);
System.out.println(year2);//2014
long l=1024*1024*1024*4; //没有后缀L/l,结果仍然为int类型
long lo=1024L*1024*1024*4;
//long类型的1024与int类型数字计算后仍为long类型;后缀L/l要加在第一个数字后面
long lon=1024*1024*1024*4*2L;
//long类型的2与int类型数字1024*1024*1024*4(溢出为0)计算仍为0;后缀L加在最后面,仍可能出错
System.out.println(Long.toBinaryString(l));//64个0,溢出
System.out.println(Long.toBinaryString(lo));//100000000000000000000000000000000
System.out.println(Long.toBinaryString(lon));//0,溢出
double d=5/2;
//2.0,因为5/2是int类型,所以结果为2,所以double类型的d为2.0
double dd=5D/2;
//2.5,double类型的5.0与2计算后为2.5
double ddd=5.0/2;//2.5
double dddd=(double)5/2;//2.5
char c='A';
char x=1;
//char ch=c+x;//错误,c和x实际为int类型;需要对整个表达式进行强制转换
char ch=(char)(c+x); //B
int in=c+x;//66
//byte,short,char按照int运算
byte[] mp3=new byte[1024*1024*5]; //5Mbyte
int i=0%3;//0,取余;0%n,(n!=0),取余都是0
int ii=2%5;//2,正数取余数为正数
int iii=-2%5; //-2
System.out.println(iii);
/*
* 以分母为基数,取余数呈现周期性;余数一定小于分母;
* 0%5 0
* 1%5 1
* 2%5 2
* 3%5 3
* 4%5 4
* 5%5 0
* 6%5 1
* ... ...
*
*/
int r=(int)(System.currentTimeMillis()%5);
System.out.println("r="+r); //r=[0,5)的随机数
}
}
周期性变化
package day03;
import java.util.Scanner;
public class OptDemo {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int i = 0;
int a = i++ % 5; // a=0
a = i++ % 5; // a=1
a = i++ % 5; // a=2
a = i++ % 5; // a=3
a = i++ % 5; // a=4
a = i++ % 5; // a=0
a = i++ % 5; // a=1
a = i++ % 5; // a=2
a = i++ % 5; // a=3
a = i++ % 5; // a=4
// ...
// 0~n周期性变化,(n+1)为分母取余;
}
}