11个关键术语:
1.简 单性 2.可移植性 3.面向对象 4.解释型 5.分布式 6.高性能7.健 壮性 8.多线程 9.安全性 10.动态性 11.体系结构中立
在网页中运行的Java程序称为applet。
数据类型
8种基本数据类型 整型 int 4字 节short 2字节long 8字 节byte 1字节浮点型 float 4字节
double 8字节char 表示unicode编码的字符单元 boolean true/false
严格浮点运算:strictfp即strict float point (精确浮点)
运算符
示例:
算术运算符 +,-,*,/,% 自增自减运算符 n++,n--,++n,--n 关系运算符与boolean运 算符 !=,<,>,<=,>=
&&(与),||(或),!(非),
x<y?x:y(三元操 作),位运算符 处理整型数据时,可以直接对组成整型数值的各个位进行操作。
&(与),|(或),^(异或),~(非),
>>(右移),<<(左移),
>>>(无 符号 右移位)
按位与:对应两个二进位均为1, 结 果才为1;
按位或:对应两个二进位有一个为1, 结 果为1;
按位异或:对应两个二进位相异时,结果为1;
按位非:对运算数的每一位取反;
右移:向右移动,低位移出,高位的空位补符号位,即正数补零,负数补一;
左移:直到范围的最大,int右 移32位时等于原始。
无符号右移:向右移动,低位移出,高位空位补零,对于正数来说和带符号右移相同。
- /**
- * Filename: TestMath.java
- * Description:
- * Copyright: Copyright (c)2014
- * Company: SENRSL
- * @author: senRsl senRsl@163.com
- * @version: 1.0
- * Create at: 2014年3月19日 下午3:49:56
- *
- * Modification History:
- * Date Author Version Description
- * ------------------------------------------------------------------
- * 2014年3月19日 senRsl 1.0 1.0 Version
- */
- package com.dc.test.core7th;
- /**
- * 运算符
- *
- * @ClassName: TestMath
- * @author senRsl
- *
- * @Package: com.dc.test.core7th
- * @CreateTime: 2014年3月19日 下午3:49:56
- *
- */
- public class TestMath {
- public static void main(String[] args) {
- bitwise();
- math();
- }
- /**
- * 位运算
- */
- public static void bitwise(){
- int n = 100; //二进制1100100
- int fourthBitFromRight = (n & 8 ) /8;//
- System.out.println(fourthBitFromRight);
- n = 9; //二进制1001
- fourthBitFromRight = (n & 8 ) /8;//(1001 & 1000)= 1000=8/8=1
- System.out.println(fourthBitFromRight);
- System.out.println("当前n:"+n);
- n= 3;
- /******************按位与************************/
- System.out.println("按位与");
- //按位与&,双目运算符
- //只有对应的两个二进位均为1时,结果位才为1,否则为0
- int h = 9; //00001001
- n = 5; //00000101
- System.out.println(h & n);//结果为00000001等于1
- System.out.println(h & 11);//11为00001011,与9时结果为00001001等于9
- System.out.println(h & 31);//31为00011111,与9时结果为00001001等于9
- System.out.println(n & 31);//31为00011111,与5时结果为00000101等于5
- //255的二进制数为0000000011111111
- //按位与运算通常用来对某些位清0或保留某些位
- // 二期示例
- // 5&3=1
- // 0000 0000 0000 0000 0000 0000 0000 0101
- // 0000 0000 0000 0000 0000 0000 0000 0011
- // 0000 0000 0000 0000 0000 0000 0000 0001
- // -5&3=3
- // 1111 1111 1111 1111 1111 1111 1111 1011
- // 0000 0000 0000 0000 0000 0000 0000 0011
- // 0000 0000 0000 0000 0000 0000 0000 0011
- System.out.println(5&3);
- System.out.println(-5&3);
- /******************按位或************************/
- System.out.println("按位或");
- //按位或|,双目运算符
- //只要对应的二个二进位有一个为1时,结果位就为1
- System.out.println(h | n);//9和5,结果为00001101等于13
- // 二期示例
- // 5|3=7
- // 0000 0000 0000 0000 0000 0000 0000 0101
- // 0000 0000 0000 0000 0000 0000 0000 0011
- // 0000 0000 0000 0000 0000 0000 0000 0111
- //
- // -5|3=-5
- // 1111 1111 1111 1111 1111 1111 1111 1011
- // 0000 0000 0000 0000 0000 0000 0000 0011
- // 1111 1111 1111 1111 1111 1111 1111 1011
- System.out.println(5|3);
- System.out.println(-5|3);
- /******************按位异或************************/
- System.out.println("按位异或");
- //按位异或^,双目运算符
- //当两对应的二进位相异时,结果为1
- System.out.println(h ^ n);//9^5,结果为00001100等于12
- // 5^3=6
- // 0000 0000 0000 0000 0000 0000 0000 0101
- // 0000 0000 0000 0000 0000 0000 0000 0011
- // 0000 0000 0000 0000 0000 0000 0000 0110
- //
- // -5^3=-8
- // 1111 1111 1111 1111 1111 1111 1111 1011
- // 0000 0000 0000 0000 0000 0000 0000 0011
- // 1111 1111 1111 1111 1111 1111 1111 1000
- System.out.println(5^3);
- System.out.println(-5^3);
- /******************按位非************************/
- System.out.println("按位非");
- //按位非(NOT),一元运算符
- //对运算数的每一位取反
- //System.out.println(n & 0x0f);
- // System.out.println(~h);//0000000000001001结果为1111111111110110
- //00000000 00000000 00000000 00001001
- //11111111111111111111111111110110
- // System.out.println(~37);//37为100101,取反为011010
- //补码,反码,不明觉厉。。。。
- // 二期示例
- // 0000 0000 0000 0000 0000 0000 0000 0101 正5
- // 1111 1111 1111 1111 1111 1111 1111 1010 取反
- System.out.println(~5);
- // 1111 1111 1111 1111 1111 1111 1111 1011 负5的补码
- // 0000 0000 0000 0000 0000 0000 0000 0100 全部取反
- System.out.println(~-5);
- /******************右移位************************/
- System.out.println("右移位");
- System.out.println(h >> 2);//9为00001001,右移2位为00000010结果为2
- System.out.println(h >> 3);//9为00001001,右移3位为00000001结果为1
- System.out.println(h >> 4);//9为00001001,右移4位为00000000结果为0
- //关于负数
- //1 求出原码。即5 的原码是 0000 0101. -5 的原码 1000 0101;
- //2 求出反码。正数的反码与原码一致。负数的原码除最高位取反。
- // 即:5 的反码是 0000 0101. -5 的反码 1111 1010;
- //3 求出补码。正数的补码与反码、原码一致。负数的补码是反码加1。
- // 即:5 的补码是 0000 0101. -5的补码是 1111 1011.
- //给原码求补码:
- // -4 原码 1000 0100 4的原码是100,第一个符号位负为1,正为0
- // -4 反码 1111 1011 原码取反 (除符号位)
- // -4 补码 1111 1100 反码 + 1
- //给补码求原码
- // -4 补码 1111 1100
- // -4 反码 1111 1011 补码码 - 1
- // -4 原码 1000 0100 反码取反 (除符号位)
- /* -5>>3=-1
- 1111 1111 1111 1111 1111 1111 1111 1011
- 1111 1111 1111 1111 1111 1111 1111 1111
- 其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。
- -5<<3=-40
- 1111 1111 1111 1111 1111 1111 1111 1011
- 1111 1111 1111 1111 1111 1111 1101 1000
- 其结果与 -5*2*2*2 完全相同。
- 5>>3=0
- 0000 0000 0000 0000 0000 0000 0000 0101
- 0000 0000 0000 0000 0000 0000 0000 0000
- 其结果与 5/(2*2*2) 完全相同。
- 5<<3=40
- 0000 0000 0000 0000 0000 0000 0000 0101
- 0000 0000 0000 0000 0000 0000 0010 1000
- 其结果与 5*2*2*2 完全相同。
- -5>>>3=536870911
- 1111 1111 1111 1111 1111 1111 1111 1011
- 0001 1111 1111 1111 1111 1111 1111 1111
- 无论正数、负数,它们的右移、左移、无符号右移 32 位都是其本身,
- 比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。*/
- System.out.println(-5 >> 3);
- System.out.println(-5 << 3);
- System.out.println(5 >> 3);
- System.out.println(5 << 3);
- System.out.println(-5 >>> 3);
- /******************左移位************************/
- System.out.println("左移位");
- System.out.println(h << 2);//9为00001001,左移2位为00100100结果为36
- System.out.println(h << 3);//9为00001001,左移3位为01001000结果为72
- System.out.println(h << 4);//9为00001001,左移4位为10010000结果为144
- System.out.println(h << 5);//9为00001001,左移5位为000100100000结果为288
- System.out.println(h << 6);//9为00001001,左移6位为001001000000结果为576
- System.out.println(h << 7);//9为00001001,左移7位为010010000000结果为1152
- System.out.println(h << 8);//9为00001001,左移8位为100100000000结果为2304
- System.out.println(h << 12);//9为00001001,左移12位为1001000000000000结果为36864
- System.out.println(h << 16);//9为00001001,左移16位为10010000000000000000结果为589824
- System.out.println(h << 20);//9为00001001,左移20位为100100000000000000000000结果为9437184
- System.out.println(h << 24);//9为00001001,左移24位为1001000000000000000000000000结果为150994944
- // System.out.println(h << 28);//9为00001001,左移28位为10010000000000000000000000000000结果为2415919104
- //int 类型是4字节*8=32位
- //取值范围为 2 147 483 647,右移28位时结果为2 415 919 104超出结果范围
- System.out.println(h << 27);//9为00001001,左移27位为1001 0000 0000 0000 0000 0000 0000 000结果为1207959552
- System.out.println(h << 28);
- System.out.println(h << 29);
- System.out.println(h << 32);//9为00001001,左移32位重归于9
- }
- public static void math(){
- System.out.println("数学函数");
- double x = 4;
- double y = Math.sqrt(x);//平方根
- System.out.println(y);
- y = Math.pow(x, 2);
- System.out.println(y);//x的2次方,求幂
- }
- }
进制转换
十进制转二进制 算法:
用2辗 转相除至结果为1, 将 余数和最后的1从 下 向上倒序写,就是结果例子:100的 二进制
100/2 = 50 余 050/2 = 25 余025/2 = 12 余112/2 = 6 余06/2 = 3 余03/2 =1 余1二进制为1100100二进制转十进制 算法:
从最后一位开始算,依次列为0,1,2...位,第n位的数(0或1)乘以2的n次方,得到的结果相加。例子:1100100转 十进制
第0位:0 * 2的0次方=0第1位:0 * 2的1次方=0第2位:1 * 2的2次方=4第3位:0 * 2的3次方=0第4位:0 * 2的4次方=0第5位:1 * 2的5次方=32第6位:1 * 2的6次方=64然后结果相加:0+0+4+0+0+32+64=100
-- senRsl 2014-03-20 11:20 GMT+8 @Beijing TongZhou
没有评论 :
发表评论