- 浏览: 218235 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
microwindlab:
你不应该加 --shell 参数,因为 --shell run ...
由mongodb的维护引发的 grep,awk,sed 与管道的应用 -
Jerryhome:
楼主超牛,值得好好学习
windows系统下的进程监测程序--实现过程记录 -
xb_91674981:
学习一下,模式在程序设计是很重要
《大话设计模式》一书的所有代码和UML类图 -
Jason(aijun):
正在学习,非常感谢分享。
《大话设计模式》一书的所有代码和UML类图 -
wurb_travelsky:
正在看这本书,C#的代码倒也不影响阅读
《大话设计模式》一书的所有代码和UML类图
原文:http://blog.csdn.net/lengchun10/archive/2009/04/24/4107222.aspx
注:原文是有点错误的,我这里已修正
在算术运算符部分,需要特别注意的一个语法现象是“ 晋升 ” 。晋升指低于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 。
数学意义: 带符号右移(>>)一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。
13>>2 : 正数带符号右移 = 13/2^2取商 ,得数为:3
-13>>2: 负数带符号右移 = -13/2^2取向下取整的商,得数为:-4
-13>>>2: 负数无符号右移 = (-13/2^2) + [2^(32-2)],得数为:1073741820 (-4 + 1073741824)
发表评论
-
w3school html 学习笔记
2014-04-25 20:38 911当显示页面时,浏览 ... -
phpcms 笔记
2014-04-24 16:53 867Phpcms v9的pc_webserver一安装上,就不 ... -
dive into python 笔记
2014-02-13 17:23 658第三章 tuple 是没有app ... -
python 爬某高校C++题库小程序
2014-01-18 15:44 1434最近在学习C++,爬下一些题来,用于平时练手。 原理其实也 ... -
centos下饭强--obfucated-openssh sshcenter.info
2013-09-26 21:47 15431. git clone https://github.com ... -
android的【qq通讯录】导出短信,在iphone上恢复
2013-07-14 22:00 5967事件经过:朋友原来用android手机,现在新买了ipho ... -
python的一些记录
2013-05-03 13:53 1205正则表达式的一些常用元字符和语法: http://www. ... -
《程序设计导引及在线实践》学习
2012-05-31 17:13 1039P41 int MyItoa(char s[]) 将s中以 ... -
accelerated c++ 学习笔记
2012-04-26 00:53 1200Chapter 0 A namespace is a ... -
关于foreach与普通for的区别
2012-04-10 22:07 1329请问两者的区别 for(A a : alist) { ... -
学习Linux命令,读《系统程序员成长计划》
2012-03-06 16:41 1346linux命令小结: cat : ... -
base64,日期操作,jexl读取excel
2012-03-06 16:40 220007-22:学习base64的加密和解密,求几天前的日期和求两 ... -
无题。。好代码记录
2011-12-27 11:35 772编写函数expand(s1,s2),将字符串s1中类似于a-z ... -
数据结构:排序
2011-11-09 13:08 952排序一般分为:插入排序,选择排序,交换排序,归并排序和分配排序 ... -
c语言复习笔记
2011-11-07 17:24 2134指针部分: 1.指针类型说明 main(){ in ... -
并发学习笔记(更新中,java编程思想第四版21章)
2011-10-19 23:47 1591实现并发最直接的方式是在操作系统级别使用进程。 并发任 ... -
并发学习笔记(更新中,java编程思想第四版21章)
2011-10-19 21:05 0从今天起记录学习到的知识。 -
RMI 入门
2011-10-07 16:23 1563RMI : remote method invocation, ... -
《大话设计模式》一书的所有代码和UML类图
2011-08-29 16:08 4296如题,把《大话设计模式》一书的所有代码和UML类图写出来,见附 ... -
windows系统下的进程监测程序--实现过程记录
2011-05-26 22:50 6208单位的客服中心的服务器有个接口程序,这三天都出现了自动退出的情 ...
相关推荐
10. 表达式计算:Java中算术运算符的优先级和自增自减运算符的使用会影响到表达式的最终结果。 填空题答案: 1. 编译生成字节码、解释运行字节码 2. Applet、MyApplet.java 3. javac.exe、3、.class 4. 2字节内存...
学习Java首先要了解变量声明、数据类型(如int、String等)、运算符、控制结构(如if语句、for循环、while循环)以及方法定义。 2. **类与对象**:Java是基于类的,这意味着一切皆为对象。理解类的定义、构造函数、...
这份资料可能是从www.pigkrtv.com等网站转载而来,旨在帮助学习者深化对Java编程语言的理解,提高编程技能。 在Java编程学习过程中,掌握基本概念、语法以及解决问题的能力至关重要。这份习题集涵盖了以下几个关键...
JAVA_HOME 是 jdk 的安装路径,CLASSPATH 是 jvm 转载 class 字节码文件时的搜索路径,PATH 是系统的环境变量、命令的搜索路径。 5. JVM JVM 是一个逻辑的操作系统,它屏蔽了硬件和平台的信息,jvm 能将字节码文件...
如需转载或修改文档,请遵循相关版权公告,并可通过反馈表单提出意见。 #### 二、文件名 ##### 2.1 文件后缀 Java软件开发中常用的文件后缀有: - `.java`:Java源文件 - `.class`:Java编译后的字节码文件 ###...
1. **基础语法**:Java的基础语法是面试的起点,包括变量定义、数据类型、运算符、流程控制(如if-else,switch,for,while,do-while)等。面试官可能会询问关于final关键字的用法,以及如何实现方法重载和覆盖。 ...
网络上一些小伙伴写的一些关于Android版OpenCV的博客,大部分都模糊不清,基本就复制粘贴的,有些甚至没有实践就直接贴上去了,这样不仅误导初学的一些小伙伴,而且被其他小伙伴转载或者复制之后,会造成更大的影响...
在这个过程中,词法分析(也称为扫描或词法分解)是第一步,它是将源代码文本转化为编程语言的结构化元素,如标识符、关键字、常量、运算符等。本文将深入探讨`javac`在词法分析阶段如何处理Java源代码。 **词法...
转载本文章请标明作者和出处 本文出自《Darwin的程序空间》 能阻止你成功的人,只有你自己 vlog 时间:2020年02月28日-2020年03月01日 ——————两个白天,一个通宵 学习方式:视频(黑马),博客,百度 完成...
C#的基础语法包括变量声明、数据类型(如整型、浮点型、字符型、布尔型等)、运算符(算术、比较、逻辑等)、控制结构(如if语句、switch语句、循环结构for、while、do-while等)以及函数的定义与调用。 2. **类与...