1.将按位运算操作,尤其是左移和右移(有无符号)整理到自己的博客中。
重点说明清晰负数的运算过程。
2.byte数到十六进制字符串表现形式程序设计原理和实现方式整理到博客中。
3.定义函数,计算一位整型数组所有元素的和。
4.数组的拷贝。
5.堆内存默认是1/4,
----------------------------------------
java -Xmx//设置堆内存最大值
-Xms//设置堆内存初始值
className//类名
---------------------------------------------------------------------
/**
* 运算符演示,重点位运算
*/
class CalcDemo {
public static void main(String[] args) {
// 位运算符
System.out.println("****** 逻辑运算符 *********");
int a = -7;//先转换为二进制再运算.看到-7,先算7(先用byte简化来代int 0000 0111),然后再算-7(1111 1001)的补码显示
int b = 3;//0000 0011
System.out.println("a << 2 = " + (a << 2));// -28--- -7*2^2=-28 被移除的高位丢弃,空位补0
//-7(1111 1001) 向左移动2位数 1110 0100----一看是负数,算对应整数0001 1100=28 对应-28
System.out.println("a >> 2 = " + (a >> 2));// -2 被移位的二进制最高位是0的话,右移后,空缺位补0----是1的话空缺位就补1.
//-7(1111 1001) 向右边移动二位, 移位后【11】11 1110 最高位符号位是1是负数,对应整数0000 0010=2,所以值是 -2
System.out.println("a >>> 2 = " + (a >>> 2));// 1073741822 无符号位移,被移位二进制最高位无论是0或1,空缺位都是补0
//-7整型( 11111111 11111111 11111111 1111 1001) 向右边移动二位, 移位后【00】111111 11111111 11111111 1111 1110最高位符号位是0,是整数,直接算对应的二进制的值
System.out.println("a | b = " + (a | b));// -5 有一个位真1,就为1 真 1111 1001 | 0000 0011 ----1111 1011----对应的整数0000 0101=5,所以-5
System.out.println("a & b = " + (a & b));// 1 有一个位0假就为0假 1111 1001 & 0000 0011 ----0000 0001---对应的整数1
System.out.println("a ^ b = " + (a ^ b));// -6 异或运算(异或( ^ )与或( | )的不同之处是:当左右都为true时,结果为false。只有不一样的时候才是真)
//1111 1001 ^ 0000 0011 ----异或运算后1111 1010----对应的整数0000 0110=6,所以-6
System.out.println("~a = " + (~a));// 6 按位取反
//-7(1111 1001) 按位取反后0000 0110 对应的是整数6
System.out.println("~b = " + (~b));//-4
//3(0000 0011) 按位取反后 1111 1100 ----对应正数 0000 0100=4,所以是值 -4
// 逻辑运算符
boolean b1 = false;
boolean b2 = true;
System.out.println("****** 逻辑运算符 *********");
System.out.println("b1 | b2 = " + (b1 | b2));// true
System.out.println("b1 & b2 = " + (b1 & b2));// false
System.out.println("b1 ^ b2 = " + (b1 ^ b2));// true
System.out.println("!b1 = " + !b1);// true
System.out.println("b1 || b2 = " + (b1 || b2));// true
System.out.println("b1 && b2 = " + (b1 && b2));// false
// +-符号
System.out.println("****** 正负号 *********");
System.out.println("+a = " + (+a));
System.out.println("-a = " + (-a));
// 算术运算符 + - * / %
System.out.println("****** 算术运算符 *********");
System.out.println("a + b = " + (a + b));//
System.out.println("a - b = " + (a - b));//
System.out.println("a * b = " + (a * b));//
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
// 赋值运算符 a += b ==> a = a + b
System.out.println("****** 赋值运算符 *********");
System.out.println("a += b = " + (a += b));//
System.out.println("a -= b = " + (a -= b));//
System.out.println("a *= b = " + (a *= b));//
System.out.println("a /= b = " + (a /= b));//
System.out.println("a %= b = " + (a %= b));//
// 比较运算符
System.out.println("****** 比较运算符 *********");
System.out.println("a == b = " + (a = b));//
System.out.println("a != b = " + (a != b));//
System.out.println("a > b = " + (a > b));//
System.out.println("a >= b = " + (a >= b));//
System.out.println("a < b = " + (a < b));//
System.out.println("a <= b = " + (a <= b));//
}
}
---------------------------------------------------------------------
//2.byte数到十六进制字符串表现形式程序设计原理和实现方式整理到博客中。一个byte有8位
/**
* 将字节类型数组转换成十六进制的字符串表现形式,比如(二进制的1111 到十进制的15 再到16进制F), 如 1111 1111 表示成16进制0x FF
*/
class Byte2Hex {
public static void main(String[] args) {
byte b = 108;//0110 1100
System.out.println(convert(b));
}
// 转换函数
public static String convert(byte b) {
//15的值二进制0000 1111
// 1.取出字节b的低四位的数值
int low = b & 0x0F; // 低四位0-15 b是108 -----0110 1100 &0000 1111 完后大位数的四位不管是什么都是0,就看前面小4位数,1100=12,是c
// 2.取出高四位的值,先将b向右移动4位
int high = (b >> 4) & 0x0F; // 高四位0-15 0000 0110 & 0000 1111 这里关键是和0000 1111&运算完后大位数的四位不管是什么都是0,
// 定义字符数组
char[] arr = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };//这里是从0开始,arr[0]就是0
// 拼接串
return "" + arr[high] + arr[low];
}
}
---------------------------------------------------------------------
//3.定义函数,计算一位整型数组所有元素的和。
/**
* 计算所有元素的总和
*/
class SumDemo {
public static void main(String[] args) {
int result = sum(new int[]{1,2,4,5,6});
System.out.println(result);//计算数组总和
System.out.println(multi(4));//计算数的阶乘
}
// 计算数组的总和
public static int sum(int[] arr) {
int sum = 0;
// 循环数组
for (int i = 0; i < arr.length; i++) {
// 开始累加
sum = sum + arr[i];
}
return sum;
}
// 计算数的阶乘
public static int multi(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result = result * i;
}
return result;
}
}
---------------------------------------------------------------------
//4.数组的拷贝。
class ArrayCopyDemo {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr1 = {2, 3, 4, 5};
int[] arr2 = new int[arr1.length];//创建一�和arr1�度相同的��arr2
copy(arr1, arr2);
out(arr2);
}
//��每�值的��
private static void copy(int[] arr1, int[] arr2) {//私有方法,本���
for (int i = 0; i < arr1.length; i++) {
arr2[i] = arr1[i];
}
}
private static void out(int[] arr) {//打印一位��
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
---------------------------------------------------------------------
5.堆内存的默认最大空间是物理内存的1/4,在运行java程序时,可以通过 -Xms初始堆内存的大小,-Xmx设置最大堆内存的大小;