《程序、数据、变量和计算.ppt》由会员分享,可在线阅读,更多相关《程序、数据、变量和计算.ppt(56页珍藏版)》请在金锄头文库上搜索。
1、Java 程序设计程序设计第二章第二章 程序、数据、变量和计算程序、数据、变量和计算第二章第二章 程序、数据、变量和计算程序、数据、变量和计算n本章将介绍本章将介绍JavaJava语言的基础知识,包括基语言的基础知识,包括基本语言要素、基本本语言要素、基本数据类型数据类型、变量、数组、变量、数组、运算符等。扎实地掌握这些内容对后续学运算符等。扎实地掌握这些内容对后续学习是很有必要的。习是很有必要的。n标识符(标识符(Identifier)n保留字(保留字(Reserved Word )1、Java语言基本元素语言基本元素n程序员对程序中的各个元素加以命名时使用的命名程序员对程序中的各个元素加以
2、命名时使用的命名记号称为标识符(记号称为标识符(identifieridentifier)包括:包括:类名、变量类名、变量名、常量名、方法名、名、常量名、方法名、JavaJava语言中,标识符是以语言中,标识符是以字母,下划线(字母,下划线(_ _), ,美元符美元符($)($)开始开始的一个字符序列,后面可以跟字母,下划线,美元符,数字。的一个字符序列,后面可以跟字母,下划线,美元符,数字。n合法的标识符合法的标识符identifier identifier userNameuserName User_Name User_Name _sys_value $change _sys_value
3、$changen非法的标识符非法的标识符2mail2mailroom#room# classclassn JavaJava语言是一种区分大小写字母语言是一种区分大小写字母 republicanrepublicanRepublicanRepublican1、Java语言基本元素语言基本元素标识符标识符n具有专门的意义和用途,不能当作一般的标识符使用,这些标识符称为保留字(reserved word)。abstract break byte boolean catch case class char continue default double do else extends false fin
4、al float for finally if import implements int interface instanceof long length native new null package private protected public final return switch synchronized short static super try true this throw throws threadsafe transient void while1、Java语言基本元素语言基本元素保留字保留字n数据和返回值类型数据和返回值类型:int, void, returnn包包
5、/类类/成员成员/接口:接口:package, class, interfacen访问控制访问控制:public, private, protectedn循环及循环控制循环及循环控制:if, switch, breakn例外处理例外处理:throw, try, finallyn保留词(无含义但不能使用):保留词(无含义但不能使用):goto, const1、Java语言基本元素语言基本元素保留字:基本分类保留字:基本分类n在在Java中,中,true、false和和null都是小写都是小写的。区别于的。区别于C+中大写的中大写的TRUE、FALSE和和NULL。n所有的数据类型所占用的字节数都
6、是所有的数据类型所占用的字节数都是固定的,并且和实现无关的,因此在固定的,并且和实现无关的,因此在Java中中没有没有sizeof操作符。操作符。1、Java语言基本元素语言基本元素保留字:注意事项保留字:注意事项2、Java数据类型数据类型q 常量(常量(Constant)q 变量变量(Variable)q 数据类型(数据类型(Data Type)n 基本数据类型(基本数据类型(Primary Data Types)n 复合数据类型(复合数据类型(Composite Data Types)JavaJava中中 的的 常常 量量 值值 是是 用用 文文 字字 串串 表表 示示 的,它的,它 区
7、区 分分 为为 不不 同同 的的 类类 型,如型,如 整整 型型 常常 量量 123123,实,实 型型 常常 量量 1.231.23,字,字 符符 常常 量量 a a ,布布 尔尔 常常 量量 truetrue、falsefalse以以 及及 字字 符符 串串 常常 量量 This is a constant string.This is a constant string.。与与 C C、 C+C+不不 同,同,JavaJava中中 不不 能能 通通 过过 #define#define命命 令令 把把 一一 个个 标标 识识 符符 定定 义义 为为 常常 量,而量,而 是是 用用 关关 键
8、键 字字 finalfinal来来 定义定义2、Java数据类型数据类型常量(常量( Constant )n定义常量的语法格式定义常量的语法格式( (C、 C+ #define命 令 ) )n final Type varName = value , varName =value ; 关键字关键字 类型类型 常量名常量名 常量值常量值nfinal int globalAccount = 100, nationalAccount = 50;nfinal double PI=3.14159 布尔常量布尔常量 true falsetrue falsen整型常量整型常量n一般常量:一般常量:32bit
9、 32bit 长整型常量:长整型常量:64bit (88L)64bit (88L)n十进制数:非十进制数:非0 0开头的正负整数开头的正负整数 105105,-23-23n八进制数:八进制数: 0 0开头的正负整数开头的正负整数 017(15), -023(-19)017(15), -023(-19)n十六进制:十六进制:0x0x开头的正负整数开头的正负整数 0x2F(47),-0xa8(-168)0x2F(47),-0xa8(-168)2、Java数据类型数据类型常量(常量( Constant )n浮点常量浮点常量n一般浮点常量一般浮点常量(32bit) 3.14F 6.18E3F(32bi
10、t) 3.14F 6.18E3Fn双精度浮点数(双精度浮点数(64bit ) 7.56D 6.02E23 (D64bit ) 7.56D 6.02E23 (D可可省)省)ncharchar型常量:用单引号界定型常量:用单引号界定n ,aan采用采用UnicodeUnicode码,从码,从 u0000 u0000 - - uFFFFuFFFF, 其中其中u00-uFFu00-uFF为为ASCIIASCII码码n字符串常量:用双引号界定字符串常量:用双引号界定n“HELLOHELLO,WORLD”WORLD”n+ +号的特殊用法号的特殊用法“Hello”+ Hello”+ “World” Worl
11、d” 即即“HelloWorldHelloWorld”若若a=4, a=4, 则则“a= a= ” +a +a 即即 “a=4” “a=4”2、Java数据类型数据类型常量(常量( Constant )n特殊字符特殊字符 引用方法引用方法 对应对应UnicodeUnicode码码意义意义 bb u0008 u0008退格退格 tt u0009 u0009 横向跳格、横向跳格、水平制表水平制表符符tabtab n nu000au000a换行换行 rru000du000d回车回车 ”u0022u0022双引号双引号 u0027u0027单引号单引号 u005cu005c反斜线反斜线2、Java数据
12、类型数据类型常量(常量( Constant )n程序中的基本存储单元程序中的基本存储单元n变量声明:变量声明:先声明,后使用先声明,后使用 声明变量的格式声明变量的格式( (包括包括变量名、变量类型和作用域变量名、变量类型和作用域几个几个部分部分) type variableName1, type variableName1, variableName2,;variableName2,; type type variableName1=initValue,variableName2=variableName1=initValue,variableName2=initVainitValuelue
13、,;,; 类型类型 变量名变量名 变量初始值变量初始值 如:如:double a,b,c;double a,b,c; intint nSecondnSecond = 10 ; = 10 ; 2、Java数据类型数据类型变量变量nJavaJava中变量的中变量的缺省初值缺省初值都是确定的:都是确定的:n布尔变量的初值为:布尔变量的初值为:falsefalsen整数变量的初值为:整数变量的初值为:0 0n浮点数变量的初值为:浮点数变量的初值为:0.00.0n引用(复合)变量的初值为:引用(复合)变量的初值为:nullnulln在在方法实现中定义的变量必须显式的初始化。方法实现中定义的变量必须显式的
14、初始化。n变量的作用域变量的作用域 指可访问变量的一段代码,在程序中不同的地方声明的变量指可访问变量的一段代码,在程序中不同的地方声明的变量具有不同的作用域:局部变量、类变量、方法参数、例外具有不同的作用域:局部变量、类变量、方法参数、例外处理参数。在一定的作用域内,变量名必须唯一。处理参数。在一定的作用域内,变量名必须唯一。2、Java数据类型数据类型变量变量nUnicode Unicode 码字符集是一种标准字符集。码字符集是一种标准字符集。n开发开发Unicode Unicode 码字符集的目的是,使得它码字符集的目的是,使得它能对几乎所有语言所必需的字符进行编码能对几乎所有语言所必需的
15、字符进行编码n例例2、Java数据类型数据类型变量名和变量名和Unicode码码Java type systemprimitivereferencenullcharnumericbooleanclassinterface arrayintegralfloating-pointbyteshortintlongfloatdouble2、Java数据类型数据类型数据类型数据类型基本数据类型基本数据类型复合数据类型复合数据类型n 所有基本类型所占的位数都是确定的,并不因操作系统的不同而不同。n 所有基本类型的关键词都是小写的。数据类型数据类型所占位数所占位数数的范围数的范围 缺省数值缺省数值 char
16、 160 65535 u0000 byte 8-2727-1 0 short 16-215215-1 0 int 32-231231-1 0 long 64-263263-1 0 f loat 323.4e038 3.4e038 0.0F double 64 1.7e308 1.7e308 0.0D boolean 8 false or true false2、Java数据类型数据类型基本数据类型基本数据类型n布尔型数据只有两个值true和false,且它们不对应于任何整数值布尔型变量的定义如:boolean b = true; n布尔型数据只能参与逻辑关系运算:n& | = = != ! n
17、示例:n Boolean.java2、Java数据类型数据类型基本数据类型:基本数据类型:布尔类型布尔类型(boolean)注意:注意: booleanboolean型变量不同于型变量不同于其他基本数据类型,它不能强其他基本数据类型,它不能强制转换成其他基本数据类型,制转换成其他基本数据类型,而且其他数据基本类型也不能而且其他数据基本类型也不能转换成转换成booleanboolean型型nchar型变量存储一个字符,每个字符在内存中占用16位,两个字节。(Unicode)n字符常量是用单引号括起来的一个字符na B n u0030n说明和初始化字符变量:n char myCharacter =
18、 X;n这条语句用字母这条语句用字母X的的Unicode码字符码字符表示初始化表示初始化变量。变量。 2、Java数据类型数据类型基本数据类型:基本数据类型:字符类型字符类型(char) 字符转义序列字符转义序列n通过指定转义序列中字符代码的十六进制通过指定转义序列中字符代码的十六进制表示,编程者可以定义表示,编程者可以定义UnicodeUnicode码字符码字符n 表示转义序列开始。把表示转义序列开始。把uu放在由放在由4 4个十六个十六进制数字表示的字符前,为该进制数字表示的字符前,为该UnicodeUnicode码字码字符建立转义序列。符建立转义序列。n例例 由于字母由于字母X X的的U
19、nicodeUnicode编码为编码为0x0058,0x0058,所所以:以:char char myCharactermyCharacter = X; = X; char char myCharactermyCharacter = u = u00580058;n特殊字符的常量表示法:特殊字符的常量表示法:n反斜线(反斜线(BackslashBackslash)n退格(退格(BackspaceBackspace)bbn回车(回车(Carriage returnCarriage return)rrn进纸符(进纸符(Form feedForm feed)ffn制表符(制表符(Form feedFo
20、rm feed)ttn换行(换行(New lineNew line) nnn单引号(单引号(Single quoteSingle quote) n八进制数(八进制数( 00377377 )DDDDDDnUnicodeUnicode字符字符 uHHHHuHHHH2、Java数据类型数据类型基本数据类型:基本数据类型:字符类型字符类型(char) charchar型变量,内存分配给型变量,内存分配给2 2个字节个字节,占,占1616位,最高位不是符位,最高位不是符号位,没有负数的号位,没有负数的charchar。charchar型变量的取值范围是型变量的取值范围是0 06553665536。要观察
21、一个字符在。要观察一个字符在UnicodeUnicode表中的顺序位置,必须表中的顺序位置,必须使用使用intint类型显示转换,不可以使用类型显示转换,不可以使用shortshort型转换,因为型转换,因为charchar的最高位不是符号位。同样,要得到一个的最高位不是符号位。同样,要得到一个0 0 6553665536之间的数所代表的之间的数所代表的UnicodeUnicode表中相应位置上的字符也必须使表中相应位置上的字符也必须使用用charchar型显示转换。型显示转换。 下面的下面的例子例子2 2中,分别用显示转换来显示一些字符在中,分别用显示转换来显示一些字符在UnicodeUni
22、code表中的位置,以及某些位置上的字符。表中的位置,以及某些位置上的字符。2、Java数据类型数据类型基本数据类型:基本数据类型:字符类型字符类型(char)n 字符放入算数运算字符放入算数运算 char char myCharactermyCharacter= =X X; ; myCharactermyCharacter+=1; +=1; Y Y 2、Java数据类型数据类型基本数据类型:基本数据类型:字符类型字符类型(char)n char char acharachar=0;=0; char char bcharbchar= = uu00280028; acharachar=(char
23、)(2*bchar+8) X=(char)(2*bchar+8) X的代码值的代码值0x00580x0058n整型常量整型常量1. 1. 十进制整数十进制整数如如123123,456456,0 02. 2. 八进制整数八进制整数以以0 0开头,如开头,如01230123表示十进制数表示十进制数8383,011011表示十进制数表示十进制数9 9。3. 3. 十六进制整数十六进制整数以以0x0x或或0X0X开开头头,如如0x1230x123表表示示十十进进制制数数291291,0X120X12表表示示十十进进制制数数1818。n整型变量整型变量整型变量的定义如:整型变量的定义如:intint x
24、=123; x=123; / /指定变量指定变量x x为为intint型,且赋初值为型,且赋初值为123123 byte byte b b = = 8; 8; short short s s = = 10; 10; long long y y = = 123L; 123L; long long z z = = 123l; 123l; 2、Java数据类型数据类型 基本数据类型:基本数据类型:整数类型整数类型(byte, short, int, long)n64位长整数以l或L结尾: 12l, -343L, 0xfffffffffLn没有以l或L结尾的数字,根据其实际值所属范围,可以被用作byt
25、e,short,或int型整数n以l或L结尾的数字,无论其实际值所属范围怎样,都被用作long型整数2、Java数据类型数据类型 基本数据类型:基本数据类型:整数类型整数类型(byte, short, int, long)n实型常量实型常量1. 1. 十进制数形式十进制数形式由由数数字字和和小小数数点点组组成成,且且必必须须有有小小数数点点,如如0.123, 0.123, .123, .123, 123.,123.0123.,123.02. 2. 科学计数法形式科学计数法形式如如:123e3123e3或或123E3123E3,其其中中e e或或E E之之前前必必须须有有数数字字,且且e e或或
26、E E后后面面的的指指数必须为整数。数必须为整数。n当编程者指定浮点型常量时,按照默认方式这些常量当编程者指定浮点型常量时,按照默认方式这些常量将是双精度类型。将是双精度类型。n当编程者希望指定单精度型数值时,只需在该数值后当编程者希望指定单精度型数值时,只需在该数值后加后缀加后缀F F或或f.f.n0.230.23f f, 1.23E-4, 1.23E-4f f , , . 18. 18F F2、Java数据类型数据类型 基本数据类型:基本数据类型:浮点数类型,实型浮点数类型,实型(float, double)n实型变量类型为类型为floatfloat或或doubledouble,float
27、float在机器中占在机器中占3232位,位,doubledouble占占6464位。实位。实型变量的定义如:型变量的定义如:ndouble d1 = 127.0;double d1 = 127.0; 赋初值为赋初值为127127ndouble d2 = 127;double d2 = 127; 赋初值为赋初值为127127nfloat f1 = 127.0f;float f1 = 127.0f; 必须在数字后加必须在数字后加f f或或F Fnfloat f2 = 4.0e38f;float f2 = 4.0e38f; 错误!错误!3232位浮点数不能超过位浮点数不能超过 3.40282346
28、63852886e38 3.4028234663852886e38nfloat f3 = (float)d1;float f3 = (float)d1; 必须强制类型转换必须强制类型转换 2、Java数据类型数据类型基本数据类型:基本数据类型:浮点数类型,实型浮点数类型,实型(float, double)n同种数据类型转换同种数据类型转换:n短类型短类型 长长类型:默认类型:默认n长类型长类型 短类型:短类型:强制强制 例例n不同数据类型转换不同数据类型转换字符字符/数值:强制数值:强制例:例:int a ; long b ; char c; b = a ; a = ( int ) b ; c
29、= (char) a ; a=(int) cn布尔型与其他数据类型之间不能强制类型转换布尔型与其他数据类型之间不能强制类型转换byteshortintlongfloatdouble2、Java数据类型数据类型基本数据类型:基本数据类型:数据类型转换数据类型转换import java.io.*; public class a public static void main(String args) int i=65; char c=a, cc=刘; System.out.println(i); 65 System.out.println(char)i);A System.out.println(
30、c);a System.out.println(int)c);97 System.out.println(cc);刘 System.out.println(int)cc);21016 System.out.println(char) 29579);王 2、Java数据类型数据类型基本数据类型:基本数据类型:数据类型转换数据类型转换n 数据类型转换必须满足如下规则:n不能对boolean类型进行类型转换。n不能把对象类型转换成不相关类的对象。n 在把容量大的类型转换为容量小的类型时必须使用强制类型转换。2、Java数据类型数据类型基本数据类型:基本数据类型:数据类型转换数据类型转换例如例如 in
31、tint x=(int)34.89; x=(int)34.89; 输出输出x x将是将是3434,强制转换运算可能导致精度,强制转换运算可能导致精度的损失。当把一个整数赋值给一个的损失。当把一个整数赋值给一个bytebyte、shortshort、intint或或longlong型变量时,不可以超出这些变量的取型变量时,不可以超出这些变量的取值范围,否则必须进行类型转换运算。值范围,否则必须进行类型转换运算。 下面我下面我们看一个们看一个例子例子:2、Java数据类型数据类型基本数据类型:基本数据类型:数据类型转换数据类型转换n在在JavaJava中,中,引用(引用(referencerefe
32、rence)指向一个对象在内存中的位指向一个对象在内存中的位置,本质上它是一种带有很强的完整性和安全性限制的指置,本质上它是一种带有很强的完整性和安全性限制的指针。针。n当你声明某个当你声明某个类类、接口接口或或数组数组类型的变量时,那个变量的类型的变量时,那个变量的值总是某个对象的引用或者是值总是某个对象的引用或者是nullnull。n指针就是简单的地址而已,引用除了表示地址而外,还是被引用的数据对指针就是简单的地址而已,引用除了表示地址而外,还是被引用的数据对象的缩影,还提供其他信息。象的缩影,还提供其他信息。n指针可以有指针可以有+、-运算,引用不可以运算。运算,引用不可以运算。n引用型
33、变量只支持有限的逻辑判断:引用型变量只支持有限的逻辑判断:n相等判断(是否同一个对象的引用):相等判断(是否同一个对象的引用):= != = != ntheObjecttheObject = null = nullnotherObjectotherObject != != theObjecttheObject 2、Java数据类型数据类型复合(引用)数据类型复合(引用)数据类型n运算符(Operator)和表达式(Expression)n注释(Comment)n语句(Statement)n代码段(Code Block)n作用域(Scope)3、Java语言的结构语言的结构(1)运算符)运算符n
34、算术运算符: +,*,/,%,+,n关系运算符: ,=,&,|,n赋值运算符: =,及其扩展赋值运算符如+=,=,*=,/=等。n条件运算符: ? :3、Java语言的结构语言的结构运算符和表达式运算符和表达式q 其它n分量运算符 ,n下标运算符 ,n实例运算符 instanceof,n内存分配运算符 new,n强制类型转换运算符 (类型),n方法调用运算符 () n 由于数据类型的长度是确定的,所以没有长度运算符sizeof。3、Java语言的结构语言的结构运算符和表达式运算符和表达式(2)表达式)表达式表达式是由操作数和运算符按一定的语法形式组成的符号序列。n一个常量或一个变量名字是最简单
35、的表达式,其值即该常量或变量的值;n表达式的值还可以用作其他运算的操作数,形成更复杂的表达式。例:xnum1+num2a*(b+c)+d3.14x , , , = , = 15) = , += , -= , *= , /= , %= , =8)= , != 16) &= , |= , = , = 3、Java语言的结构语言的结构运算符和表达式运算符和表达式n举例:n/ 单行注释,简单的解释语句含义.n/* 多行注释,用来说明更多的内容,包括算法等.nn*/3、Java语言的结构语言的结构注释注释n一个由分号(;)结尾的单一命令是一条语句(Statement),一条语句一般是一行代码,但也可以占
36、多行代码。nint a = 1; / 变量定义及初始化语句n用大括号( )围起来的多条语句构成一个代码段(Code block);n class Aclass for (int i=0; i=1; i+) 3、Java语言的结构语言的结构语句和代码段语句和代码段n作用域(Scope)决定了变量可使用的范围n成员变量(Global variables):变量可以在整个类类中被访问;例n本地变量( Local variables ):变量只能在定义其的代码段中被访问。例n作用域规则:在一个代码段中定义的变量只能在该代码段或者该代码段的子代码段中可见。3、Java语言的结构语言的结构作用域作用域nc
37、lass Scoping n int x = 0;n void method1() n int y;n y = x; / OK. method1可以访问y.n n void method2() n int z = 1;n z = y; / Error. y 在method2的作用域之外定义n n 3、Java语言的结构语言的结构作用域作用域 位运算符用来对二进制位进行操作,分为左移位操作和右位运算符用来对二进制位进行操作,分为左移位操作和右移位操作。移位操作。 (1 1)左移位运算符)左移位运算符 左移位运算的符号为:左移位运算的符号为:,是双目运算符。左移位运算符,是双目运算符。左移位运算符
38、左面的操作元称作被移位数,右面的操作数称作移位量,操左面的操作元称作被移位数,右面的操作数称作移位量,操作元必须是整型类型的数据。作元必须是整型类型的数据。 假设假设a a是一个被移位的整型数据,是一个被移位的整型数据,n n是位移量。是位移量。 anan运算的结果是通过将运算的结果是通过将a a的所有位都左移的所有位都左移n n位,每左移一位,每左移一个位,左边的高阶位上的个位,左边的高阶位上的0 0或或1 1被移出丢弃,并用被移出丢弃,并用0 0填充右边填充右边的低位。的低位。3、Java语言的结构语言的结构移位运算符移位运算符 对于对于bytebyte或或shortshort型数据,型数
39、据,anan的运算结果是的运算结果是intint型精度。当型精度。当进行进行 a2a2 运算时,计算系统首先将运算时,计算系统首先将a a升级为升级为intint型数据,对于正数将型数据,对于正数将高位用高位用0 0填充;负数用填充;负数用1 1填充,然后在进行移位运算。例如,填充,然后在进行移位运算。例如,对于对于 byte a=-8;byte a=-8; 1111 1000 1111 1000 在进行在进行a1a1运算时,首先将运算时,首先将1111 10001111 1000生级为生级为intint型,将高型,将高位用位用1 1填充:填充: 1111 1111 11111111 1111
40、1111 11111111 11111111 11111111 11111111 1000 1000 然后在进行移位运算得到然后在进行移位运算得到-16-16: 1111 1111 11111111 11111111 11111111 11111111 11111111 11111111 0000 00003、Java语言的结构语言的结构移位运算符移位运算符 因此,如果把因此,如果把a1a1的结果赋值给一个的结果赋值给一个bytebyte型变量就必须型变量就必须进行强制转换运算:进行强制转换运算: byte b=(byte b=(byte)(abyte)(a1);1); 在进行在进行anan运
41、算时,如果运算时,如果a a是是bytebyte、shortshort或或intint型数型数据,系统总是先计算出据,系统总是先计算出n%32n%32的结果的结果m m,然后进行,然后进行amam运运算。例如,算。例如,a33a33的计算结果与的计算结果与a1a1相同。对于相同。对于longlong型型数据,系统总是先计算出数据,系统总是先计算出n%64n%64的结果的结果m m,然后进行,然后进行ama,是双目运算符。假设,是双目运算符。假设a a是是一个被移位的整型数据,一个被移位的整型数据,n n是位移量。是位移量。 anan运算的结果是通过将运算的结果是通过将a a的所有位都右移的所有
42、位都右移n n位,每右位,每右移一个位,右边的低阶位被移出丢弃,并用移一个位,右边的低阶位被移出丢弃,并用0 0或或1 1填充填充左边的高位,左边的高位,a a是正数用是正数用0 0填充,负数时用填充,负数时用1 1填充。因此,填充。因此,a a每右移一次,如果该数的每一计算有效位都没有从低每右移一次,如果该数的每一计算有效位都没有从低位移出时,就相当于将位移出时,就相当于将a a除以除以2 2并舍弃了余数。并舍弃了余数。整数不整数不断右移位的最后结果一定是断右移位的最后结果一定是0 0,而负数不断右移位的最,而负数不断右移位的最后结果是后结果是-1-1。 对于对于bytebyte或或shor
43、tshort型数据,型数据,anan的运算结果是的运算结果是intint型精型精度。度。3、Java语言的结构语言的结构移位运算符移位运算符 在进行在进行anan运算时,如果运算时,如果a a是是bytebyte、shortshort或或intint型数据,型数据,系统总是先计算出系统总是先计算出n%32n%32的结果的结果m m,然后进行,然后进行amam运算,运算,例如,例如,a33a33的计算结果与的计算结果与a1a1相同。对于相同。对于longlong型数据,型数据,系统总是先计算出系统总是先计算出n%64n%64的结果的结果m m,然后进行,然后进行amam运算。运算。 在下面的在下
44、面的例子例子中,用户输入移位运算的两个操作元,中,用户输入移位运算的两个操作元,程序给出右移和左移后的结果。程序给出右移和左移后的结果。3、Java语言的结构语言的结构移位运算符移位运算符 (1 1)“按位与按位与”运算符运算符 “& &”是双目运算符,对两个整型数据是双目运算符,对两个整型数据a a、b b按位进行运算,按位进行运算,运算结果是一个整型数据运算结果是一个整型数据c c。运算法则是:如果。运算法则是:如果a a、b b两个数据两个数据对应位都是对应位都是1 1,则,则c c的该位是的该位是1 1,否则是,否则是0 0。 (2 2)“按位或按位或”运算符运算符 “| |”是双目运
45、算符。对两个整型数据是双目运算符。对两个整型数据a a、b b按位进行运算,按位进行运算,运算结果是一个整型数据运算结果是一个整型数据c c。运算法则是:如果。运算法则是:如果a a、b b两个数据两个数据对应位都是对应位都是0 0,则,则c c的该位是的该位是0 0,否则是,否则是1 1。 (3 3)“按位非按位非”运算符运算符 “”是单目运算符。对一个整型数据是单目运算符。对一个整型数据a a按位进行运算,运按位进行运算,运算结果是一个整型数据算结果是一个整型数据c c。运算法则是:如果。运算法则是:如果a a对应位是对应位是0 0,则,则c c的该位是的该位是1 1,否则是,否则是0 0
46、。3、Java语言的结构语言的结构位运算符位运算符(4 4)“按位异或按位异或”运算符运算符 “ ”是双目运算符。对两个整型数据是双目运算符。对两个整型数据a a、b b按位进行运算,运算结果是一个整型数据按位进行运算,运算结果是一个整型数据c c。运算法则是:如果。运算法则是:如果a a、b b两个数据对应位两个数据对应位相同,则相同,则c c的该位是的该位是0 0,否则是,否则是1 1。 在下面的在下面的例子例子中,利用中,利用“异或异或”运算的运算的性质,对几个字符进行加密并输出密文,性质,对几个字符进行加密并输出密文,然后再解密。然后再解密。3、Java语言的结构语言的结构位运算符位运
47、算符 条件运算符是一个条件运算符是一个3 3目运算符,它的符号是:目运算符,它的符号是:“?:?:”,需要连接,需要连接3 3个操作元,用法如下:个操作元,用法如下: op1op1?op2op2:op3op3 要求第一个操作元要求第一个操作元op1op1的值必须是的值必须是booleanboolean型数据。运型数据。运算法则是:当算法则是:当op1op1的值是的值是truetrue时,时,op1?op2:op3op1?op2:op3运算的运算的结果是结果是op2op2的值;当的值;当op1op1的值是的值是falsefalse时,时,op1?op2:op3op1?op2:op3运算的结果是运
48、算的结果是op3op3的值。例如,的值。例如,128?100:200128?100:200的结果是的结果是100100;128?100:20012 带符号右移:左侧空出位全用符号位填充带符号右移:左侧空出位全用符号位填充n 左移:符号位被挤掉左移:符号位被挤掉 x 二进制补码表示二进制补码表示 x 2 30 00011110 01111000 00000111 -17 11101111 10111100 11111011 1281 128 / 21 = 64 2564 256 / 24 = 16 -2564 -256 / 24 = -16 128 1 128 * 21 = 256 16 3?y
49、:z; /k=8运算符例运算符例n有关自加和自减的综合实例有关自加和自减的综合实例n有关关系运算符的综合实例有关关系运算符的综合实例 n 有关逻辑运算符的实例有关逻辑运算符的实例 n有关异或运算符的实例有关异或运算符的实例 n有关带符号的移位运算符的实例有关带符号的移位运算符的实例 n有关三元运算符的实例有关三元运算符的实例 4 数据的输入与输出 由于由于C C语言出现的比较早,那个时候还没有图形用户语言出现的比较早,那个时候还没有图形用户界面的概念(界面的概念(Graphics User InterfaceGraphics User Interface),因此,),因此,C C语语言提供了许
50、多用来输入、输出数据的函数,例如言提供了许多用来输入、输出数据的函数,例如printfprintf 、scanfscanf等。等。 JavaJava不象不象C C,提供在命令行进行数据输入、,提供在命令行进行数据输入、输出的功能不多。输出的功能不多。 关于输入、输出我们将在第九章详细关于输入、输出我们将在第九章详细介绍,现在只需知道它的作用是在命令行窗口(例如,介绍,现在只需知道它的作用是在命令行窗口(例如,MS-DOSMS-DOS窗口)输出数据即可。窗口)输出数据即可。SunSun公司新推出的公司新推出的SDK1.5SDK1.5又又新增了一些在命令行进行数据输入、输出的功能。新增了一些在命令
51、行进行数据输入、输出的功能。4 数据的输入与输出1 1数据输出:数据输出: System.out.printfSystem.out.printf System.out.printfSystem.out.printf的功能完全类似的功能完全类似C C语言中的语言中的printfprintf函数。函数。pringfpringf的一般格式:的一般格式: printfprintf( (格式控制部分,表达式格式控制部分,表达式1 1,表达式,表达式2 2,表达式表达式n);n); 这里的用法与这里的用法与C C语言相同,这里不再累述。语言相同,这里不再累述。 下面我们看一个下面我们看一个例子例子, ,来
52、进一步了解来进一步了解 System.out.printfSystem.out.printf 数据输出:数据输出:4 数据的输入与输出 2 2数据的输入:数据的输入:ScannerScanner Scanner Scanner是是SDK1.5SDK1.5新增的一个类,可以使用该类创建一新增的一个类,可以使用该类创建一个对象:个对象: Scanner reader=new Scanner reader=new Scanner(System.inScanner(System.in);); 然后然后readerreader对象调用下列方法(函数),读取用户在命对象调用下列方法(函数),读取用户在命令
53、行输入的各种数据类型,令行输入的各种数据类型, nextBytenextByte(), (), nextDoublenextDouble(), (), nextFloatnextFloat(), (), nextIntnextInt(),(), nextLine(),nextLongnextLine(),nextLong(), (), nextShortnextShort()()。4 数据的输入与输出 上述方法执行时都会堵塞,等待你在命令行输入数据上述方法执行时都会堵塞,等待你在命令行输入数据回车确认。回车确认。 下面让我们来看一个下面让我们来看一个例子例子,来更好的了解,来更好的了解ScannerScanner语句,语句,在这个例子中,用户在键盘依次输入若干个数字,每输入在这个例子中,用户在键盘依次输入若干个数字,每输入一个数字都需要按回车键确认,最后在键盘输入一个非数一个数字都需要按回车键确认,最后在键盘输入一个非数字字符结束整个的输入操作过程。程序将计算出这些数的字字符结束整个的输入操作过程。程序将计算出这些数的和及平均值。和及平均值。