数据与运算(以及补码)

一、数据类型
1、两大类:
1、基本数据类型: 内存中占长度字节
逻辑型:boolean 1
整数型:byte 1
short 2
int 4
浮点数型long 8
float 4
double 8
字符型:char 2

2、引用类型:对象、接口、数组

2、常量:
布尔常量 整型常量 浮点常量 字符常量(包括转义符等) 字符串常量
转义符:
\ddd 1到3位八进制数所表示的字符(ddd)
\uxxxx 1到4位十六进制数所表示的字符
\r 回车
\f 走纸换页
\t 横向跳格TAB
\b 退格

3、/**...*/ 是java所特有的doc注释。主要是为支持JDK工具javadoc而采用的。javadoc能识别注释中用标记@标识的一些特殊变量,并把doc注释加入它所生成的HTML文件
@see:引用其他类
@version:版本信息
@author:作者信息
@param:参数名说明
@return:说明
@exception:完整类名说明
命令:
javadoc HelloDate.java
即可生成HTML文件文档

4、运算符与表达式:
条件运算符(?:)
分量运算符 .
下标运算符[]
实例运算符 instanceof
内存分配运算符 new
强制类型转换运算符 (类型)
方法调用运算符 ()

问题:
double g=18.4;
double h=g%4; //h=2.4还是h=2.39999999999999

5、逻辑运算符:
& 逻辑与 不存在短路操作
| 逻辑或
! 取反
^ 异或
&& 简洁与 存在短路操作,只要左边为false,右边不会算,直接false
|| 简洁或

6、补码:
Java使用补码来表示二进制数,在补码表示中,最高位为符号位,正数为0,负数为1。
规则:
1、正数,最高位为0,其余各位代表数值本身,+42的补码为00101010
2、负数,把该数绝对值的补码按位取反,然后对整个数加1,即为补码。如-42,00101010取反为11010101,加1,为11010110,此为-42补码。

0的补码是唯一的,00000000,-1补码为111111。

7、按位取反运算符 “~”
~是一元运算法,对其二进制位取反,0010101 取反 1101010

8、按位与运算符“&”
参与运算的两个值,如果两个相应位都为11,则该位的结果为1,否则为0,0&0=0,0&1=0,1&0=0,1&1=1。
按位与 可以用来对某些特定的位清零。
对 11010110 的第2和第5位清零,让与11101101进行按位与运算:
11010110
(&) 11101101
得到 11000100

按位与 可以用来取某个数中某些指定的位:要取11010110中的第2和第5位:
11010110
(&) 00010010
得到 00010010

9、按位或运算符 “|”
两数中有一个1,则为1
按位或 可以用来把某些特定的位置为1,11010110第4、5位置1.
11010110
(|) 00011000
得 11011110

10、按位异或运算符 “^”
两数相同为0,否则为1
按位异或 可以用来使某些特定的位翻转(求反),11010110第4、5位求反:
11010110
(^) 00011000
得 11001110

按位异或 可以实现两个值的交换,而不使用临时变量。
交换a b的值:
a = 11010110,b = 01011001
a = a^b;
11010110
(^) 01011001
得 10001111 临时a

b = b^a;
01011001
(^) 10001111
得 11010110 b

a = a^b;
10001111
(^) 11010110
得 01011001 a a与b反了

11、左移运算符: <<
左移几,右补几个0
a = 00001111,a<<2=00111100
在不产生溢出的情况下,左移一位相当于乘2,而且用左移来实现乘法比乘法运算速度要快。

12、右移运算符: >>
右端舍弃,左边最高位则移入原来高位的值:
a=00110111,a>>2=00001101
b=11010011,b>>2=11110100
右移一位相当于除2取商,速度也比除法快。

13、无符号右移运算符 >>>
高位补0
b=11010011,b>>>2=00110100

14、不同长度的数据进行位运算:
byte a ,int b, a&b,则系统首先会a的左侧24位填满,a为正,则填满0,a为负,则左侧填满1。

15、位运算的应用:
位运算可以用来处理一组布尔标志。

16、强制类型转换:
将变量从较长的数据类型转换成较短的数据类型时,必须做强制类型转换:
(类型)表达式
int a=100;
byte b = (byte)a;

7、数组:

与C C++不同,Java在数组的定义中并不为数组元素分配内存,因此[]中不用指出数组中元素的个数,但必须为它分配内存空间,这时,要用到运算符new:
arrayName = new type[arraySize];
两句全一起:
int[] score = new int[3];

注意:数组用new分配空间的同时,数组的每个元素都会自动赋一个默认值(整数为0,实数为0.0,字符为'\0',boolean型为false,引用型为null)。这是因为,数组实际是一种引用型的变量,而其每个元素是引用型变量的成员变量。

System.copyarray()方法: 复制数组,只复制元素,如果数组是引用型变量,则只复制引用,不复制对象实体。
System.arraycopy(Object a,int aop,Object b,int bop,int length);
从a数组复制到b,从aop位置开始复制到bop位置,长度为length。

posted @ 2012-11-21 21:25  煮夫酱  阅读(437)  评论(0)    收藏  举报