- 浏览: 139493 次
- 性别:
- 来自: 重庆
文章分类
最新评论
-
Davidream:
楼主: HessianKit库,我从你提供的地址下 ...
ios Hessian Kit 包使用 -
linchanglai:
gaozengguang 写道我想请教一下:
in ...
java 运算符 -
fishinsky:
editplus 那需要这么麻烦,工具-首选项-常规-选中添加 ...
editplus 添加到右键菜单 -
yangguanghua:
我现在就感觉自己的技术停滞不前了
Java 学习路径 -
gaozengguang:
我想请教一下:
int i = 4;
i ...
java 运算符
在算术运算符部分,需要特别注意的一个语法现象是“ 晋升 ” 。晋升指低于int 的3 种数字类型(byte 、short 和char) 进行算术运算后,结果会自动提升成int 类型。 示例代码如下: byte b1 = 10; byte b2 = 20; byte b3 = b1 + b2; // 语法错误,类型不匹配 int n = b1 + b2; // 或者 byte b3 = (byte)(b1 + b2); 最后说一下&& 和& 的区别,其实在进行逻辑与运算时,既可以使用&& 也可以使用& ,在功能上本身没有区别。两者区别的位置在,对于& 来说,如果左侧条件为false ,也会计算右侧条件的值,而对于&& 来说,如果左侧的条件为false ,则不计算右侧的条件,这种现象被称作短路现象。 示例代码: int n = -1; boolean b1 = (n >= 0) && (n < 10); boolean b2 = (n >= 0) & (n < 10); 则对于第二行代码来说,两个条件都将被计算,而对于第三行代码来说,因为n >= 0 这个条件不成立,则n < 10 根本不会被执行。当然,两者得到的最终结果是一样的。 对于现在的代码来说,区别不大,但是如果后续的条件是一个方法( 方法的概念后续将介绍到) ,则将影响程序逻辑。 由于计算机内部的数据都以二进制的形式存在,所以在 Java 语言中提供了直接操作二进制的运算符,这就是下面要讲解的 位运算符和移位运算符 。 使用二进制的运算符,可以直接在二进制的基础上对数字进行操作,执行的效率比一般的数学运算符高的多, 该类运算符大量适用于网络编程、硬件编程等领域 。 二进制运算符在数学上的意义比较有限。 在 Java 代码中,直接书写和输出的数值默认是十进制, Java 代码中无法直接书写二进制数值,但是可以书写八进制和十六进制数字,八进制以数字 0 开头,例如 016 ,十六进制以数字 0 和 x 开头,例如 0x12,0xaf 等等。 在计算二进制运算时, Java 语言的执行环境 (JRE) 首先将十进制的数字转换为二进制,然后进行运算。如果输出结果的值,则数字会被转换成十六进制进行输出。 需要注意的是: 1 、正数的机器数是原码,负数的机器数是补码,计算时需要小心。关于二进制和补码的计算可以参看《 Java 编程那些事儿 7—— 进制的概念》和《 Java 编程那些事儿 8—— 计算机内部的数据表达》。 2 、整数型的计算结果都是 int 型,而不管是对 byte 还是 short 进行二进制运算。 4.5.1 位运算符 Java 语言中的位运算符主要有 4 种: &( 位与 ) 、 |( 位或 ) 、 ^( 异或 ) 和 ~( 按位取反 ) ,下面依次介绍运算规则和使用示例。 l &(AND) 运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位都为 1 ,则运算结果为 1 ,否则为 0 。 适用场合:屏蔽数字中某一位或某些位。因为任何数和 0 与都是 0 。 示例代码: int a = 4; int b = 10; int c = a & b; 计算过程: 4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100 10 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 1010 按照计算规则 , 结果为 0000 0000 0000 0000 0000 0000 0000 0000 这个数字转换为十进制就是数字 0 l | (OR) 运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位有一个为 1 则为 1 ,否则为 0 。 适用场合:将数字中某一位或某些位修改成 1 。因为 1 和任何数或都是 1 。 示例代码: int a = 4; int b = -10; int c = a | b; 计算过程: 4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100 -10 的二进制形式为 1111 1111 1111 1111 1111 1111 1111 0110 按照计算规则 , 结果为 1111 1111 1111 1111 1111 1111 1111 0110 这个二进制数转换为十进制就是数字 -10 。 l ^(XOR) 运算规则:参与运算的数字,低位对齐,高位不足的补零,对应的二进制位相同为零,不相同为 1 。 适用场合:判断数字对应的位是否相同。 示例代码: int a = 4; int b = 10; int c = a ^ b; 计算过程: 4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100 10 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 1010 按照计算规则 , 结果为 0000 0000 0000 0000 0000 0000 0000 1110 这个数字转换为十进制就是数字 14 l ~(NOT) 运算规则:只操作一个数字,将该数字中为 1 的位变成 0 ,为 0 的位变成 1 。 适用场合:反转数字的内容 示例代码: int a = 4; int c = ~a; 计算过程: 4 的二进制形式为 0000 0000 0000 0000 0000 0000 0000 0100 按照计算规则 , 结果为 1111 1111 1111 1111 1111 1111 1111 1011 这个数字转换为十进制就是数字 -5 。 其实位运算和实际的应该实现保持一致,也就是提供的电路级运算符号,每种运算符都有对应的电路实现。 实际使用简单示例: 把任意数字转换为正数 假设 n 是一个任意的整数,则把 n 转换为正数的代码为: int m = n & 0x7fffffff; 判断任意数字倒数第三位的值是否为 1 假设 n 是一个任意的整数,则判断的代码为: int m = n & 0x4; boolean b = (m != 0); 将任意数字倒数第四位置为 1 假设 n 是一个任意的整数,则代码为: int m = n | 0x8; 4.5.2 移位运算符 移位运算符就是在二进制的基础上对数字进行平移。按照平移的方向和填充数字的规则分为三种: <<( 左移 ) 、 >>( 带符号右移 ) 和 >>>( 无符号右移 ) 。 在移位运算时, byte 、 short 和 char 类型移位后的结果会变成 int 类型,对于 byte 、 short 、 char 和 int 进行移位时,规定实际移动的次数是移动次数和 32 的余数,也就是移位 33 次和移位 1 次得到的结果相同。移动 long 型的数值时,规定实际移动的次数是移动次数和 64 的余数,也就是移动 66 次和移动 2 次得到的结果相同。 例如 11 >> 2 ,则是将数字 11 右移 2 位 计算过程: 11 的二进制形式为: 0000 0000 0000 0000 0000 0000 0000 1011 ,然后把低位的最后两个数字移出, 因为该数字是正数,所以在高位补零 。则得到的最终结果是 0000 0000 0000 0000 0000 0000 0000 0010 。转换为十进制是 2 。 整数编码
整数有正负之分,但是计算机内部只能存储0和1,则计算机内部将符号数字化,用二进制码的最高位代表符号位,规定该位为0代表正,1代表负。这就是符号数字化的规定。 前面介绍过整数在计算机内部都是以二进制的形式保存的。但是为了计算方便,以及简化CPU的结构,所以在存储和运算时都采用补码的形式。 前面介绍的那些直接计算出来的二进制形式,都称作整数的原码。规定正数的原码、反码和补码都是自身。 而对于负数,仔细研究一下其组成格式。以8位机为例,也就是一个数字占计算机中的8位,也就是一个字节,用最高位存储符号位,其它的位存储数值。例如-8的原码是10001000,最高位的1代表负数,后续的7位代表数值。 负数的反码是指符号位不变,其他的位取反,也就是0变1,1变0,则-8的反码是11110111.负数的补码是指在反码的数值位上加1,运算后得到的结果,只计算数值位,不改变符号位。则-8的补码是11111000,该次运算中,低位向高位进行了进位。 规律:补码的补码等于负数的原码。 也就是对负数的补码再求补,则得到的负数的原码。 熟悉整数的表达,对于后续理解数据的区间以及进行强制转换以后得到的数值很有帮助,也是进行位运算的基础。
评论
int i = 4; int j = 9; if( ( i++ > 4 ) && ( j++ > 9 ) ) System.out.println( "first" );
会输出吗?
不会!
int i = 4; int j = 9; if( ( i++ > 4 ) && ( j++ > 9 ) ) System.out.println( "first" );
会输出吗?
发表评论
-
java 书籍推荐
2012-04-28 00:21 842http://liugang-ok.iteye.com/blo ... -
eclipse debug jdk
2012-03-20 10:59 781Debug JDK,让变量现行 http://lovesps ... -
java 国际化
2012-02-19 22:53 0这里比较基础 http://www.cnblogs.com/ ... -
java Annotation 使用
2012-02-07 10:09 643java Annotation 使用文章, 发现非常详细, 基 ... -
jdic使用
2011-11-21 17:42 1184在java应用程序中嵌入浏览器 http://duduhe ... -
swing hide cursor
2011-09-01 06:58 908It appears that the Cursor clas ... -
java byte array to hex String
2011-08-23 19:33 2934String str = new String(byte[] ... -
Java Serial Communication
2011-08-21 23:22 768串口通信详解 http://david20080309.it ... -
swing 新应用
2011-08-16 00:34 860关于自定义table, jTabbedPane等 jt ... -
在可执行jar 包中动态载入第三方jar class的有关问题
2011-08-10 14:11 807转自 : http://www.cnblogs.com/bao ... -
java 播放音频
2011-08-08 23:54 1383http://www.jsresources.org/exam ... -
jfreechart 心电图
2011-08-01 22:01 1264这个是个demo , 可以拿去改改 -
java 打印
2011-07-29 18:11 697http://java.sun.com/products/ja ... -
jmock cookbook 资源整合
2011-05-08 23:32 919jmock cookbook 资源整合 包含 1. jmo ... -
判断端口是否被占用和常用正则表达式
2011-02-23 22:05 1275判断端口是否被占用和常用正则表达式 全是goole得到 ... -
java Thread 片段整理
2010-07-18 21:09 939一, 线程的生命周期 1. Wating state一旦线程 ... -
Java 学习路径
2009-12-19 09:30 1189最近一直由于一些原因, ... -
URL 的具体分析
2009-12-13 10:57 13421. 创建 URL URL(String spec) ... -
java Doclet 概述
2009-12-10 21:31 5090Doclet 概述 <!-- Bo ... -
java.text.MessageFormat的使用
2009-12-08 22:59 2409MessageFormat 类用来格式化消息。非常的好用 ...
相关推荐
Java运算符Java运算符Java运算符Java运算符Java运算符Java运算符Java运算符Java运算符
非常详细的java运算符优先级表,帮助记住优先级顺序
28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符.zip28.java运算符...
这是一个关于java运算符简单的小程序 嘿嘿 欢迎使用
JAVA运算符思维导图,便捷整理思路,算数运算符、连接运算符、赋值运算符、扩展赋值运算符、三目运算符、逻辑运算符、关系运算符
Java运算符+(优先级、目数)
java运算符与优先级,完善版本。 谢谢,
Java运算符,包括运算符的优先级和目数……
本文件包含详细的java运算符以及运算符优先级
java运算符PPT,描述的是运算符等java基础知识,而后表达式,流程控制等
Java运算符分类 Java运算符主要分为四类:算术运算符、关系运算符、逻辑运算符和位运算符,这些运算符用于实现不同的数学和逻辑功能。 算术运算符介绍 算术运算符包括加、减、乘、除和取余等基本运算,它们可以对...
收集了Java运算符,很清楚的用表格显示出它们的使用方法和区别哦! 赶紧下载哦!
java运算符
Java运算符优先级.pdf
运算符优先级 ,类型 ,转义字符 ,Math函数 ,数据类型转换
Java运算符是编写Java程序时必不可少的元素之一,也是面试中常见的考点。本文提供了二十道常见的面试题,涵盖了Java运算符的类型、功能、优先级、特性等方面的知识点。这些问题旨在考察候选人对Java运算符的理解和...
JAVA运算符.pdf
java运算符优先级.doc