java复习(1)
这几天开学,很多知识点还很生疏,这两天先把java基础复习一下,有段时间没有写博客了,今天就先谈谈进制转换吧。
1.二进制数的原码,补码和反码
1):对于正数的原码,补码和反码均是相同的,这里不讨论了。
2)接下来我们讨论负数的二进制的原码、反码和补码
负数二进制的原码:先计算负数绝对值的二进制值,然后对二进制每一位数据进行取反,最后再加1。负数的二进制变现形式是对应整数二进制取反然后加一
eg:-32
第一步:计算绝对值的二进制数:32(10)=0010 0000(2)
第二步:进行取反:1101 1111
第三步:加一:1110 0000
故而-32的原码为:1110 0000
反码:负数的反码等于:原码最高位不变,其余位进行取反。
eg:-32
原码:1110 0000
反码:1001 1111
补码:负数的补码等于:原码最高位不变,其余位取反,最后加一
eg:-32
原码:1110 0000
反码:1001 1111
补码:1010 0000
2.二进制数和八进制、十进制以及十六进制数之间的转换
eg:对于-10而言
原码:三步,绝对值、取反、最后加1。故原码:1111 0110
反码:原码最高位不变,其余位进行取反:1000 1001
补码:最高位不变,其余位取反,最后进行加一:1111 01111
其余二进制与八进制、十进制以及十六进制之间的转换类似于二进制与十进制之间的转换。
3.java的常量与变量
java是强类型的语言,对于每一种数据都定义了明确的具体数据类型。其中:
基本数据类型包括:1数值型;2字符型;3布尔型
数值型包括:整数类型(byte,short,int,long),浮点型(float,daouble)
字符型:char
布尔型:boolean
其中整数默认是int型,小数默认的是double类型
引用数据类型:类(class),数组([]),接口(interface)
4.Unicode,GBK和UTF-8之间的区别
5.表达式数据类型自动提升
所有的byte型、short型和char的值将被提升到int型。
如果一个操作数是long型,计算结果就是long型;
如果一个操作数是float型,计算结果就是float型;
如果一个操作数是double型,计算结果就是double型。
自动类型提升:
byte b = ;
int x = ;
x= x+b; //这个地方注意b会提升为Int类型进行计算
强制类型转换:
byte b = ;
b=b+;//这会报错,强制将int类型的数据进行降格为byte类型的数据
b=(byte)(b+); //这个地方不会进行报错,强制类型转换,先将整数值进行转换,转换为byte类型的数值,然后再进行赋值操纵
6.运算符
(1)&和|既是逻辑运算符,也是位运算符。而&&和||只是逻辑运算符。
当&与&&同为逻辑运算符的时候,他们都用于连接两个Boolean类型的表达式,当&和&&的两端表达式同时为真的时候,表达式结果为真,只要有一端为假,那么表达式结果就为假。从用法上,&和&&并没有什么区别,比如我们可以写两个表达式: 3>5&3>2 3>5&&3>2
这两个运算符都可以这么进行运用,但是不同的是,在判断这两个表达式是真或者假的时候,两者的判断次数是不相同的。
当使用&运算符的时候:计算机在判断表达式的时候,先判断3>5的值为假,然后再判断3>2的结果为真,于是最后的结果是 假&真 为假
但是当我们使用&&运算符的时候:计算机先判断3>5值为假,此时表达式的结果一定为假,所以计算机就不会再进行向下的判断了,判断表达式的结果为假。
注意:&无论左边的结果是什么,右边还是要进行运算的
&&当左边结果为假的时候,右边就不再进行运算了。
但是两者的结果是相同的。
(2)当|和||的两端表达式为假的时候,表达式的结果为假,只要一端是为真的,那么表达式的结果就为真了。同理,我们知道|和||之间的区别了:
|无论左边的结果是什么,右边还是要进行计算的。
||当左边为真的时候,右边就不会再进行计算了。
但是二者的结果是相同的。
所以|| 和$$的比较效率还是要高一些的。
记住:单&的时候,左边无论是真假,右边都要进行计算;&&的时候,如果左边为真,那么右边需要进行计算,如果左边为假,那么右边不会参与运算,"|"与"||"的区别是同理的,双或的时候左边为真,那么右边就不会参与运算;同时要记住左右两边为"true"的时候,最后的结果返回的是false
(3)接下来我们看&和|做位运算,做二进制之间的或运算或者与运算
比如:6&3=110&011=010
6|3=110 & 011=111=4+2+1=7
7.位运算
进行以为运算:
左移运算符:能将运算符左侧的匀速那对象向左移动运算符指定的位数
有符号的右移运算符则将运算度左侧的运算对象向右移动运算符右侧的指定位数,有符号右移运算符使用了符号扩展,若值为正,则在高位插0,若值为负,则在高位插1
无符号右移运算符(>>>):使用了0来进行扩展,即无论值为正还是为负,都在高位进行插入0
在进行为运算的时候需要注意:
(1):>>和>>>的区别是:在执行运算的时候,>>>运算符的操作数高位时进行补0处理的,而>>高位时补的与原来高位相同的值
<< 左移运算 比如3<<2 3=0000 0011 --- >左移两位得到:0000 1100 =12,就是3*2*2=12
>> 右移运算 比如 3>>1 3=0000 0011 --- >右移两位得到:3>>1=1 -->3/2=1
>>> 无符号右移 3>>>1=1--->3/2=1
& 与运算 6&3=2
| 或运算 6|3=7
^ 异或运算 6^3=5
~ 反码 ~6=-7
位运算的一些细节:<< 是空位补0,被移除的高位丢弃,空缺补0
>> 若被移位的二进制最高位是0,向右移动之后,空缺的位置都用0来补
>>> 被移位的二妗子无论最高位是0还是1,空缺的位都用0来进行补充
& 二进制位&运算,只有1&1时候的结果是1,否则就是0
| 二进制或运算,只有0|0的时候结果是0,否则结果是1;
^ 相同二进制位进行^运算,结果是0,1^1=0;0^0=0
不同二进制进行疑惑运算的结果是1
最有效率的计算出2*8
8.三元运算符:
格式:(条件表达式)?表达式1:表达式2;
如果条件为true,那么运算之后的结果是表达式1;
如果条件为false,那么运算后的结果是表达式2
示例:
获取两个数中的比较大的数。
Int x =3,y=4,z;
Z=(X>Y)?X:Y; //z变量存储的就是两个数的比较大的数值
java复习(1)的更多相关文章
- java 复习003 之排序篇
由java 复习003跳转过来的C语言实现版见some-sort-algorithms 快速排序(不稳定 O(n log n)) package vell.bibi.sort_algorithms; ...
- java 复习001
java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...
- java复习(1)---java与C++区别
[系列说明]java复习系列适宜有过java学习或C++基础或了解java初步知识的人阅读,目的是为了帮助学习过java但是好久没用已经遗忘了的童鞋快速捡起来.或者教给想快速学习java的童鞋如何应用 ...
- Java复习11. 单例编程
Java复习11. 单例编程 1.最简单的写法,那个方式是线程不安全的 public class Singleton { private static Singleton instance; ...
- Java复习9网路编程
Java 复习9网路编程 20131008 前言: Java语言在网络通信上面的开发要远远领先于其他编程语言,这是Java开发中最重要的应用,可以基于协议的编程,如Socket,URLConnecti ...
- Java复习8.多线程
Java复习8 多线程知识 20131007 前言: 在Java中本身就是支持多线程程序的,而不是像C++那样,对于多线程的程序,需要调用操作系统的API 接口去实现多线程的程序,而Java是支持多线 ...
- Java复习10.Servlet编程
Java复习10. Servlet编程知识 20131008 前言: 之前在大三下的时候,学习了一个月的JSP和Servlet知识,但是没有什么项目经验,把JSP Web开发学习实录看了前面几张,后面 ...
- Java复习6异常处理
Java复习6.异常处理 20131005 前言: Java中的异常处理机制是非常强大的,相比C++ 来说,更加系统.但是我们开发人员没有很好的使用这一点.一些小的程序是没有什么问题的,但是对于大型项 ...
- Java复习4.数组初始化.
Java复习4.Java中的数组声明方式 20131004 1.数组声明和初始化, 数组元素和变量一样,可以在定义的时候i进行初始化.数组元素的初始化工作实在编译阶段完成的,可以减少运行时间. 在初 ...
- Java复习7.输入输出流
Java复习7.输入输出流 20131005 前言: Java中涉及数据的读写,都是基于流的,这一块的知识相当重要,而且在Java中的数据,char字符是16bit的,所以存在字节流和字符流的区别.如 ...
随机推荐
- hive 分组排序函数 row_number() over(partition by " " order by " "desc
语法:row_number() over (partition by 字段a order by 计算项b desc ) rank --这里rank是别名 partition by:类似hive的建表, ...
- Concurrent包里的其他东西:ArrayBlockingQueue、CountDownLatch等等。
1:本例介绍一个特殊的队列:BlockingQueue,如果BlockingQueue是空的,从BlockingQueue取东西的操作将会被阻断进入等待状态,直到BlockingQueue进了东西才会 ...
- JVM系列1:内存区域
1.JVM运行区域内存划分 2.各内存区域详细介绍 2.1 程序计数器 程序计数器是一块很小的内存区域,它作为前线程所执行的字节码的行号指示器,指向当前class文件的执行代码的行数.字节码解释器工作 ...
- 5.Python使用模块
1.模块的 作用 2.模块的含义 3.模块的 导入 因此模块能够划分系统命名空间,避免了不同文件的变量重名的问题. Python的模块使得独立的文件连接成了一个巨大 ...
- 4.数据挖掘的数据仓库与OLAP技术
1.什么是数据仓库 面向主题的.集成的.时变的.非易失的 2.数据仓库和异种DBMS 3.OLTP vs OLAP 4.为什么建立分离的数据仓库? 5.多维数据模型(数据仓库的概念建模)三类度量 4. ...
- Python MySQLdb 执行sql语句时的参数传递
使用MySQLdb连接数据库执行sql语句时,有以下几种传递参数的方法. 1.不传递参数 conn = MySQLdb.connect(user="root",passwd=&qu ...
- leetcode 63 不同路径II
二维数组动态规划,还可以采用一维数组进行动态规划. class Solution { public: int uniquePathsWithObstacles(vector<vector< ...
- 代码实现:判断101-200之间有多少个素数(质数),并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数。
package com.loaderman.Coding; /* 判断101-200之间有多少个素数(质数),并输出所有素数. 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能 ...
- iOS 图表工具charts之LineChartView
关于charts的系列视图介绍传送门: iOS 图表工具charts介绍 iOS 图表工具charts之LineChartView iOS 图表工具charts之BarChartView iOS 图表 ...
- Networking 基本术语/概念
目录 文章目录 目录 基本概念 冲突域(Collision Domain) 广播域(Broadcast Domain) 冲突域与广播域的区别 IP 网络数据传输方式 物理网络设备 发展简述 中继器(R ...