東川印記

一本東川,笑看爭龍斗虎;寰茫兦者,度橫佰昧人生。

工作四年祭奠篇/第一日:数据类型及运算符

2014年3月20日星期四



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

严格浮点运算:strictfpstrict float point (精确浮点)

运算符
算术运算符 +-*/%
自增自减运算符 n++,n--,++n,--n
关系运算符与boolean运 算符 !=<><=>=
&&(与),||(),!(非),
x<y?x:y(三元操 作)
位运算符 处理整型数据时,可以直接对组成整型数值的各个位进行操作。
&(与),|(或),^(异或),~(非),
>>(右移),<<(左移),
>>>(无 符号 右移位)
按位与:对应两个二进位均为1, 结 果才为1
按位或:对应两个二进位有一个为1, 结 果为1
按位异或:对应两个二进位相异时,结果为1
按位非:对运算数的每一位取反;
右移:向右移动,低位移出,高位的空位补符号位,即正数补零,负数补一;
左移:直到范围的最大,int右 移32位时等于原始。
无符号右移:向右移动,低位移出,高位空位补零,对于正数来说和带符号右移相同。
示例:
  1. /**
  2.  * Filename:    TestMath.java
  3.  * Description: 
  4.  * Copyright:   Copyright (c)2014
  5.  * Company:     SENRSL
  6.  * @author:     senRsl senRsl@163.com
  7.  * @version:    1.0
  8.  * Create at:   2014年3月19日 下午3:49:56
  9.  *
  10.  * Modification History:
  11.  * Date         Author      Version     Description
  12.  * ------------------------------------------------------------------
  13.  * 2014年3月19日      senRsl      1.0         1.0 Version
  14.  */ 
  15. package com.dc.test.core7th;
  16. /**
  17.  * 运算符
  18.  *
  19.  * @ClassName: TestMath
  20.  * @author senRsl
  21.  *
  22.  * @Package: com.dc.test.core7th
  23.  * @CreateTime: 2014年3月19日 下午3:49:56
  24.  *
  25.  */
  26. public class TestMath {
  27.     public static void main(String[] args) {
  28.         bitwise();
  29.         math();
  30.     }
  31.    
  32.    
  33.     /**
  34.      * 位运算
  35.      */
  36.     public static void bitwise(){
  37.         int  n = 100;  //二进制1100100
  38.         int fourthBitFromRight = (n & 8 ) /8;//
  39.         System.out.println(fourthBitFromRight);
  40.         n = 9;    //二进制1001
  41.         fourthBitFromRight = (n & 8 ) /8;//(1001 & 1000)= 1000=8/8=1
  42.         System.out.println(fourthBitFromRight);
  43.        
  44.        
  45.         System.out.println("当前n:"+n);
  46.         n= 3;
  47.        
  48.        
  49.        
  50.         /******************按位与************************/
  51.         System.out.println("按位与");
  52.         //按位与&,双目运算符
  53.         //只有对应的两个二进位均为1时,结果位才为1,否则为0
  54.         int h  = 9;   //00001001
  55.         n = 5;         //00000101
  56.        
  57.         System.out.println(h & n);//结果为00000001等于1
  58.         System.out.println(h & 11);//11为00001011,与9时结果为00001001等于9
  59.         System.out.println(h & 31);//31为00011111,与9时结果为00001001等于9
  60.         System.out.println(n & 31);//31为00011111,与5时结果为00000101等于5
  61.         //255的二进制数为0000000011111111
  62.         //按位与运算通常用来对某些位清0或保留某些位
  63.        
  64. //        二期示例
  65. //          5&3=1
  66. //          0000 0000 0000 0000 0000 0000 0000 0101
  67. //          0000 0000 0000 0000 0000 0000 0000 0011
  68. //          0000 0000 0000 0000 0000 0000 0000 0001
  69.        
  70. //          -5&3=3
  71. //          1111 1111 1111 1111 1111 1111 1111 1011
  72. //          0000 0000 0000 0000 0000 0000 0000 0011
  73. //          0000 0000 0000 0000 0000 0000 0000 0011
  74.         System.out.println(5&3);
  75.         System.out.println(-5&3);
  76.        
  77.        
  78.         /******************按位或************************/
  79.         System.out.println("按位或");
  80.         //按位或|,双目运算符
  81.         //只要对应的二个二进位有一个为1时,结果位就为1
  82.         System.out.println(h | n);//9和5,结果为00001101等于13
  83. //        二期示例
  84. //          5|3=7
  85. //          0000 0000 0000 0000 0000 0000 0000 0101
  86. //          0000 0000 0000 0000 0000 0000 0000 0011
  87. //          0000 0000 0000 0000 0000 0000 0000 0111
  88. //   
  89. //          -5|3=-5
  90. //          1111 1111 1111 1111 1111 1111 1111 1011
  91. //          0000 0000 0000 0000 0000 0000 0000 0011
  92. //          1111 1111 1111 1111 1111 1111 1111 1011
  93.         System.out.println(5|3);
  94.         System.out.println(-5|3);
  95.        
  96.         /******************按位异或************************/
  97.         System.out.println("按位异或");
  98.         //按位异或^,双目运算符
  99.         //当两对应的二进位相异时,结果为1
  100.         System.out.println(h ^ n);//9^5,结果为00001100等于12
  101.        
  102. //         5^3=6
  103. //          0000 0000 0000 0000 0000 0000 0000 0101
  104. //          0000 0000 0000 0000 0000 0000 0000 0011
  105. //          0000 0000 0000 0000 0000 0000 0000 0110
  106. //       
  107. //          -5^3=-8
  108. //          1111 1111 1111 1111 1111 1111 1111 1011
  109. //          0000 0000 0000 0000 0000 0000 0000 0011
  110. //          1111 1111 1111 1111 1111 1111 1111 1000
  111.         System.out.println(5^3);
  112.         System.out.println(-5^3);
  113.        
  114.         /******************按位非************************/
  115.         System.out.println("按位非");
  116.         //按位非(NOT),一元运算符
  117.         //对运算数的每一位取反
  118.         //System.out.println(n & 0x0f);
  119. //        System.out.println(~h);//0000000000001001结果为1111111111110110
  120.         //00000000 00000000 00000000 00001001
  121.         //11111111111111111111111111110110
  122. //        System.out.println(~37);//37为100101,取反为011010
  123.         //补码,反码,不明觉厉。。。。
  124.        
  125. //        二期示例
  126. //        0000 0000 0000 0000 0000 0000 0000 0101 正5
  127. //        1111 1111 1111 1111 1111 1111 1111 1010 取反
  128.         System.out.println(~5);
  129. //         1111 1111 1111 1111 1111 1111 1111 1011 负5的补码
  130. //         0000 0000 0000 0000 0000 0000 0000 0100 全部取反
  131.         System.out.println(~-5);
  132.        
  133.         /******************右移位************************/
  134.         System.out.println("右移位");
  135.         System.out.println(h >> 2);//9为00001001,右移2位为00000010结果为2
  136.         System.out.println(h >> 3);//9为00001001,右移3位为00000001结果为1
  137.         System.out.println(h >> 4);//9为00001001,右移4位为00000000结果为0
  138.        
  139.         //关于负数
  140.         //1 求出原码。即5 的原码是 0000 0101. -5 的原码 1000 0101;
  141.         //2 求出反码。正数的反码与原码一致。负数的原码除最高位取反。
  142.         //             即:5 的反码是 0000 0101. -5 的反码 1111 1010;
  143.         //3 求出补码。正数的补码与反码、原码一致。负数的补码是反码加1。
  144.         //             即:5 的补码是 0000 0101.  -5的补码是 1111 1011.
  145.         //给原码求补码:
  146.         //    -4  原码 1000 0100  4的原码是100,第一个符号位负为1,正为0
  147.         //    -4  反码 1111 1011  原码取反 (除符号位)
  148.         //    -4  补码 1111 1100  反码 + 1
  149.         //给补码求原码
  150.         //    -4  补码 1111 1100
  151.         //    -4  反码 1111 1011 补码码 - 1
  152.         //    -4  原码 1000 0100 反码取反 (除符号位)
  153.        
  154.        
  155.         /*  -5>>3=-1
  156.           1111 1111 1111 1111 1111 1111 1111 1011
  157.           1111 1111 1111 1111 1111 1111 1111 1111
  158.           其结果与 Math.floor((double)-5/(2*2*2)) 完全相同。
  159.           -5<<3=-40
  160.           1111 1111 1111 1111 1111 1111 1111 1011
  161.           1111 1111 1111 1111 1111 1111 1101 1000
  162.           其结果与 -5*2*2*2 完全相同。
  163.    
  164.           5>>3=0
  165.           0000 0000 0000 0000 0000 0000 0000 0101
  166.           0000 0000 0000 0000 0000 0000 0000 0000
  167.           其结果与 5/(2*2*2) 完全相同。
  168.    
  169.           5<<3=40
  170.           0000 0000 0000 0000 0000 0000 0000 0101
  171.           0000 0000 0000 0000 0000 0000 0010 1000
  172.           其结果与 5*2*2*2 完全相同。
  173.    
  174.           -5>>>3=536870911     
  175.           1111 1111 1111 1111 1111 1111 1111 1011
  176.           0001 1111 1111 1111 1111 1111 1111 1111
  177.    
  178.           无论正数、负数,它们的右移、左移、无符号右移 32 位都是其本身,
  179.    
  180.           比如 -5<<32=-5、-5>>32=-5、-5>>>32=-5。*/
  181.         System.out.println(-5 >> 3);
  182.         System.out.println(-5 << 3);
  183.         System.out.println(5 >> 3);
  184.         System.out.println(5 << 3);
  185.         System.out.println(-5 >>> 3);
  186.        
  187.         /******************左移位************************/
  188.         System.out.println("左移位");
  189.         System.out.println(h << 2);//9为00001001,左移2位为00100100结果为36
  190.         System.out.println(h << 3);//9为00001001,左移3位为01001000结果为72
  191.         System.out.println(h << 4);//9为00001001,左移4位为10010000结果为144
  192.         System.out.println(h << 5);//9为00001001,左移5位为000100100000结果为288
  193.         System.out.println(h << 6);//9为00001001,左移6位为001001000000结果为576
  194.         System.out.println(h << 7);//9为00001001,左移7位为010010000000结果为1152
  195.         System.out.println(h << 8);//9为00001001,左移8位为100100000000结果为2304
  196.         System.out.println(h << 12);//9为00001001,左移12位为1001000000000000结果为36864
  197.         System.out.println(h << 16);//9为00001001,左移16位为10010000000000000000结果为589824
  198.         System.out.println(h << 20);//9为00001001,左移20位为100100000000000000000000结果为9437184
  199.         System.out.println(h << 24);//9为00001001,左移24位为1001000000000000000000000000结果为150994944
  200. //        System.out.println(h << 28);//9为00001001,左移28位为10010000000000000000000000000000结果为2415919104
  201.         //int 类型是4字节*8=32位
  202.         //取值范围为 2 147 483 647,右移28位时结果为2 415 919 104超出结果范围
  203.         System.out.println(h << 27);//9为00001001,左移27位为1001 0000 0000 0000 0000 0000 0000 000结果为1207959552
  204.         System.out.println(h << 28);
  205.         System.out.println(h << 29);
  206.         System.out.println(h << 32);//9为00001001,左移32位重归于9
  207.        
  208.     }
  209.    
  210.     public static void math(){
  211.         System.out.println("数学函数");
  212.         double x = 4;
  213.         double y = Math.sqrt(x);//平方根
  214.         System.out.println(y);
  215.         y = Math.pow(x, 2);
  216.         System.out.println(y);//x的2次方,求幂
  217.     }
  218.    
  219.    
  220. }



进制转换
十进制转二进制
算法:
2辗 转相除至结果为1, 将 余数和最后的1从 下 向上倒序写,就是结果
例子:100的 二进制
100/2 = 50 0
50/2 = 25 0
25/2 = 12 1
12/2 = 6 0
6/2 = 3 0
3/2 =1 1
二进制为1100100
二进制转十进制
算法:
从最后一位开始算,依次列为012...位,第n位的数(01)乘以2n次方,得到的结果相加。
例子:1100100转 十进制
0位:0 * 20次方=0
1位:0 * 21次方=0
2位:1 * 22次方=4
3位:0 * 23次方=0
4位:0 * 24次方=0
5位:1 * 25次方=32
6位:1 * 26次方=64
然后结果相加:
0+0+4+0+0+32+64=100
--
senRsl
2014-03-20 11:20
GMT+8 @Beijing TongZhou  

没有评论 :

发表评论