9.HTML对象模型:HTML Document Object model简称HTMLdom
10.Javascript是一种基于对象(object)和事件驱动(Event Driven)并具有安全性能的脚本语言不能单独存在,必须依附于HTML存在通过调入或嵌入主要基于客户端运行的事件(Event):在主页(HomePage)中执行某种操作所产生的动作
Windows对象:open()、close()、alert()、confirm()、prompt()
11.Javascript内置对象:string对象、Math对象、Date对象、Array对象、Event对象
时间对象:getDate、getDay、getHours、getMinutes、getMonth、getSeconds、getTime(以ms为单位)、getYear(以上全为当前对象)、getTimeZone(当前时区偏移信息)
12.Javascript中定义函数格式如下
Function funname(参数表){
执行部分
Return(需要时写)
}
13.Javascript中只有4 中数据类型:数值(整型、实型)、字符串型、布尔型、空值(null)
14.Javascript程序可放在:HTML网页的body中、HTML网页的head中、外部.js文件中
15.静态联编和动态联编
Java采用静态联编--先编再执sun公司
Javascript采用动态联编--边编边执是Netscape公司的产品,其前身是Oak语言
16.正则表达式:regular expression--res
主要用途:数据有效性验证、查找和替换
17.数据库操作步骤
@加载数据库第三方驱动程序--加载数据库连接包
@加载数据库的驱动类
@与数据库建立连接,并拿到这个连接对象
@通过Connection对象拿到数据库的操作对象Statement
@编写sql语句,通过操作对象发送对数据库的操作命令,并返回操作结果
@关闭所有数据库的连接
剖析该问题前请看如下代码
public static String bytes2HexString(byte[] b){
String ret = "";
for(int i = 0;i < b.length;i++){
String hex = Integer.toHexString(b[ i ] & 0xFF);
if(hex.length()== 1){
hex = '0' + hex;
}
ret += hex.toUpperCase();
}
return ret;} 上面是将byte[]转化十六进制的字符串,注意这里b[ i ] & 0xFF将一个byte和 0xFF进行了与运算,然后使用Integer.toHexString取得了十六进制字符串,可以看出
b[ i ] & 0xFF运算后得出的仍然是个int,那么为何要和 0xFF进行与运算呢?直接 Integer.toHexString(b[ i ]);,将byte强转为int不行吗?答案是不行的.其原因在于: 1.byte的大小为8bits而int的大小为32bits 2.java的二进制采用的是补码形式
==================以下文字貌似有问题=================== 在这里先温习下计算机基础理论
byte是一个字节保存的,有8个位,即8个0、1。8位的第一个位是符号位,也就是说0000 0001代表的是数字1 1000 0000代表的就是-1
所以正数最大位0111 1111,也就是数字127 负数最大为1111 1111,也就是数字-128
上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码
1、反码:
一个数如果是正,则它的反码与原码相同;
一个数如果是负,则符号位为1,其余各位是对原码取反;
2、补码:利用溢出,我们可以将减法变成加法
对于十进制数,从9得到5可用减法:
9-4=5
因为4+6=10,我们可以将6作为4的补数
改写为加法:
9+6=15(去掉高位1,也就是减10)得到5.对于十六进制数,从c到5可用减法:
c-7=5
因为7+9=16 将9作为7的补数
改写为加法:
c+9=15(去掉高位1,也就是减16)得到5.在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(100000000),进位1被丢弃。
⑴一个数为正,则它的原码、反码、补码相同
⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1 的原码为
100000011的补码为
11111111
0的原码为
00000000 0的反码为
11111111(正零和负零的反码相同)
+1 0的补码为
100000000(舍掉打头的1,正零和负零的补码相同)
Integer.toHexString的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,而byte只有8位这时会进行补位,例如补码11111111的十进制数为-1转换为int时变为******11好多1啊,呵呵!即0xffffffff但是这个数是不对的,这种补位就会造成误差。和0xff相与后,高24比特就会被清0了,结果就对了。
----Java中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。
而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。
引言
昨天有个朋友问我long转byte要怎么转,然后吃饭期间我问了身边的人,发现也不会转。所以我想有必要写一些位操作符和转化规则,同时还有一些不常用,但是源码中经常出现的操作符。不可能所有的都写出来,但是举一反三就可以了。在技术点中介绍一些不常用但是常见的操作符,后半部分展示实现转化的代码。笔者目前整理的一些blog针对面试都是超高频出现的。大家可以点击链接:http://blog.csdn.net/u012403290
技术点:
计算机中存储是用补码!,同时注意一下计算省略了高位不变部分
1、byte:有符号(意思是有正和负),在网络传输中都是会用到byte的,它占1个字节,共8位,比如说11111111就可以用1个byte表示,转化为10进制:-(2的6次+2的5次+2的4次+2的3次+2的2次+2的1次+2的0次)=-127。其中前7位表示数字,最高位表示符号,0为正,1为负。范围是(-2的7次 ~ 2的7次1)。
3、int :有符号,占4个字节,共32位。它的取值范围就是(-2的31次 ~ 2的31次)。
4、long:有符号,占8个字节,共64位,它的取值范围就是(-2的63次 ~ 2的63次)。
5、^:表示异或位运算,两者相同则为0,两者不同则为1。比如说15^2,15用二进制表示就是1111,2用2进制表示就是0010,两者进行异或运算,结果就是1101,转换为十进制就是13。
A B A^B 1 1 0 1 0 1 0 1 1 0 0 0
6、|:表示或运算,两者只有有一个为1就为1,比如说13|2,13用二进制表示就是1101,2用二进制表示就是0010,两者进行或运算,那么结果就是1111,转换为十进制就是15。
A B A或B 1 1 1 1 0 1 0 1 1 0 0 0
7、&:表示与运算,两者都为1就为1,其余都为0,比如说15&2,13用二进制表示就是1111,2用二进制表示就是0010,两者进行与运算,那么结果就是0010,转换为十进制就是2。
A B A&B 1 1 1 1 0 0 0 1 0 0 0 0
8、~:取反,就是本来是0变成1,本来是1变成0。
A ~B 1 0 0 1 注意:本来我打算不想解释这块的,但是学知识,既然要学了,就尽自己最大努力一次性一个知识点学透彻。我举个例子,比如说-15|3等于多少呢?有些人会觉得-15转化为二进制就是10001111,而3转化为二进制就是00000011,那么结果应该是10001111呀,转换为十进制就是-15呀?大家可以自己写个demo就会发现是不对的。要注意在计算机中所有的都是用补码的形式存储的,之所以上面介绍两个正数是对的,因为正数的反码和补码都是一样的。而负数求补码应该是出去符号位取反+1,我们再来看看这个题-15|3,其中-15的原码为10001111,反码为11110000,那么补码就是11110001,然后3的补码为00000011,两者进行或操作就是11110011,你以为结束了么?还没有,再又要求它的原码了,原码就是补码再求补码再+1(是不是已经晕掉了?),也就是10001101,结果就是-13。为了大家都好理解,我这里用算式整理一下:
求-15|3
[-15]原码 = 10001111
[-15]反码 = 11110000 //原码求反码符号位不变
[-15]补码 = 11110001 //反码+1等于补码
[3]原码 = 00000011
[3]反码 = 00000011 //正数都一致
[3]补码 = 00000011 //正数都一致
-15|3 = 11110011 //两个补码进行或操作
[结果]补码 = 11110011 //上面求得的值
[结果]反码 = 10001100 //符号位不变
[结果]原码 = 10001101 //反码+1
100001101 转化为十进制就是-13。
不知道我这么解释会不会更加清楚一些呢?同理的,上面那些(尤其是求反‘~’我故意没写例子,大家自己去试试吧)。
在说一次,正数的原码,补码,反码都一样,如果一定要说为什么一样,我就举个例子。有这么一个等式7+(-7)=0。
我们知道
[-7]原 = 10000111 [-7]反 = 11111000 [-7]补 = 11111001
那么如果要存在一个值和[-7]补码相加等于0,是不是就是00000111!所以正数的补码和原码是一致的。这样解释虽然怪怪的,但是可以知道的确是这样的。
9、<<:左移运算符,不需要考虑符号位,因为在后面补0,把二进制的数字向左移动,低位补0。比如说 3<<2。3的二进制码为11,向左移动2位就是1100,那么结果就是12。
10、>>:右移运算符,带符号位。根据这个要移动的数字决定正负,如果是正数,那么就在前面补0,如果是负数就在前面补1。比如说 3>>2,3的二进制码为00000011,向右移动2位,就变成00000000,转化为十进制就是0了(3是正数所以在高位补0)。再比如说-3>>2,-3的二进制码为10000011,转化为补码(只要涉及到负数,就需要转换到补码计算,正数之所以不用转化,是因为他们的补码和原码是一致的)11111101,进行位移运算,就是11111111,这个是补码,需要再转回原码。那么就是取反+1,结果就是10000001,转化为十进制就是-1。
11、>>>:右移运算符,与上面的区别就是这个运算符是无符号的。不论正负,高位都补0。如果要用-3>>2来验证,因为高位补0,就需要把所有的位数都写全了。如果是int,那就要写成32位来运算。切记切记。上面很多因为高位的变化“取反再取反”会导致前面所有的位都没变所以我就简化了,但是这个>>>运算符不行哦,它会把负数变为正数。
代码实现
基本步骤:
①分析转化和代转化之间位数的关系
②计算偏移量。每次都取最后8位
③把最后8位和0xff进行&操作
④得出结果。
有人会问,为什么要和0xff进行&操作?这里我做一下解释,因为再在割的时候,我们要保证最后8位是一致的,更高位都要置0,这样才能保证数据的一致性。比如说由byte转化成short。位数从8位变成了16位,那么在计算机自己看来,它会把前面多出来的8位置1。而&0xff就可以把前面所有的位数都置0。
1、short 与 byte互相转化
public static byte[] short2byte(short s){
byte[] b = new byte[2];
for(int i = 0;i < 2;i++){
int offset = 16(i+1)*8;//因为byte占4个字节,所以要计算偏移量
b[i] =(byte)((s >> offset)&0xff);//把32位分为4个8位进行分别存储
}
return b;
}
public static int byte2int(byte[] b){
int l = 0;
for(int i = 0;i < 4;i++){
l<<=8;//<<=和我们的 +=是一样的,意思就是 l = l << 8
l |=(b[i] & 0xff);//和上面也是一样的l = l |(b[i]&0xff)
}
return l;
} 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 那么long和byte的转化,甚至是long和short等之间的转化大家自己琢磨。看到这里是不是觉得自己要学的东西很多,大学学过的都忘记了呢?没关系,以后我会经常给大家复习一些重要但是不常用的东西哦。
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/u012403290/article/details/68943827 文章标签: 面试 位运算 位操作符 个人分类: java常见问题
北京股王8年不亏铁律“1272”曝光,震惊众人!陕西信息科技 · 顶新
想对作者说点什么? 我来说一句 java byte数组与short数组互相转换
public static short[] toShortArray(byte[] src){ int count = src.length / 2;short[]...vk5176891 vk5176891 2016-10-11 10:43:04 阅读数:6969 java short to bytes /** *//** * @功能: 将一个short值转为byte数组 * @参数: short sNum
要转的short值 * @返回值: byte[] bytesRet 转后的byte数组...imuse imuse 2006-11-15 14:48:00 阅读数:3193 从前端到后台,开发一个完整功能的小程序 微信开发 | wanghui_777 java中long,int,short与byte数组之间的转换
Java学习总结
在学习了三周的Java基础编程语言之后,我对Java有了一定的了解。Java是由Sun公司推出的一种面向对象的程序设计语言,现在被广泛应用于很多领域。最让我关注的一点,Java是一种开放性的技术,简称开源,与其它的编程语言相比,我始终觉得它更具有优势,并且容易掌握。同时,通过孟老师幽默风趣的讲解方式,让我对Java的学习更加的感兴趣。
第一周,我们主要学习了Java的基本概念,分支结构,循环结构以及数组。基本概念可分为以下三个部分:
(一).常量、变量、表达式。所谓常量,就是运行期间不可以改变的量,比如圆周率。变量,代表一块存储区域,并且存储区域的值是可以改变的,比如客房。通常变量的定义具有一定的规则,简称"变量三要素",变量类型变量名 = 初始值;
变量名的命名规则需要遵循:
1.智能由数字、字母、下划线及美元符组成,并且不能以数字开头。
2.不能重复定义已经定义过的变量名。
3.不能使用系统保留字。
4.要见名知意。
表达式:由常量、变量、运算符组成,并且每个表达式都会有一个返回值。其中运算符包含:+、-、*、/、%、++、--、=,符合运算符包含:+=、-=、*=、/*、%=,例如a += b → a = a + b。
(二).Java注释,单行注释,以//开始的行。多行注释,用/*和*/界定的行
(三).Java基础数据类型,整数类int,浮点型float,文本类char。
分支结构:Boolean类型,非真即假数据类型,只存在True或False。
(一).条件表达式:
关系表达式,重点在于关系运算符的掌握,>、<、>=、<=、==、!=,其返回值为boolean类型;
逻辑表达式,逻辑与(&&),逻辑或(||),逻辑非(!),其返回值为boolean类型;条件运算符,?:→表达式A?表达式B:表达式C,表达式A为真,则结果为B,表达式A为假,则结果为C。
==========Java学习总结=========
从3月8号开班以来我们已经学习Java 有3个多月了,主要学习了Java基础知识、OOP(面向对象)、JavaSE、ORACLE(数据库)、JDBC WebBasic、JQUERY、ServletJsp和一些常用的框架。
一、Java基础知识
主要学习了Java变量的定义、基本类型、运算符和表达式、分支结构、循环结构、数组和方法等。
二、OOP OOP是学习Java中的重中之重,是Java编程的核心思想。Java中一切皆对象,围绕着面向对象的三大特性展开,封装性、继承性和多态性是OOP三大特性。引入了对象、类、内存管理、抽象类、接口、内部类等概念,在学习面向对象的特性时学习了方法的重载、方法重写等知识。最后,学习了一些常见关键字(static、final、import、protected等)的特点、作用和使用环境。
三、JavaSE
JavaSE学习分为两部分,其一是学习Java中一些常用的API、正则表达式、日期操作、集合操作、包装类、文件操作。第二部分主要学习了基本的IO文本数据操作、异常处理、多线程基础知识、TCP和UDP通信,最后学习了可扩展标记语言XML的语法和用法。
四、ORACLE(数据库)Oracle数据库主要学习了数据库原理、常用的操作语句(DDL、DML、DCL等)、Oracle操作(字符串、数值、日期、控制操作)、SQL的查询(基础、关联、高级查询),最后简要学习了视图、序列、索引和约束。
五、JDBC 主要知识JDBC原理、JDBC的核心API、JDBC编程操作和DAO。
六、WebBasic WebBasic的学习主要分为以下几点:
1)Web概述、HTML的简述、文本处理、图像和超链接、表格和表单的使用处理。
2)CSS部分:主要包含 CSS的一些概念知识,CSS的声明、语法和CSS的一些常用的选择器。
3)JavaScript:JavaScript基础知识概述,JavaScript对象的概述和对象应用的场合。
七、JQUERY jQuery概念的介绍,jQuery选择器,jQuery操作DOM、事件处理和jQuery动画。
八、ServletJSP 1)Servlet基础知识概述、Servlet的换工作原理、Servlet的特性,HTTP协议和容器对路径的处理。2)①JSP的基本的语法、运行原理,JSP中的转发、重定向的使用和区别及JSP开发中的常见的问题。②JSP的状态管理分为cookie和session,JSP中的过滤器和监听器,EL表达式和JSTL表达式。
九、常用的应用开发框架 1)Spring框架:Spring容器、Spring的IOC,Spring的参数注入、基于注解的组件扫描,Spring Web MVC简介和应用。Spring对JDBC的整合支持,Spring+JDBCTemplate.2)MyBatis框架介绍和应用,Spring与MyBatis的整合及其应用。3)Ajax的简介和使用,Ajax在编码中会产生的一些问题。使用JSON实现数据交互,jQuery对Ajax的支持。
学习心得:我觉得学习Java是一个循序渐进的过程,要坚持不懈、有始有终。Java学习是一个系统性的学习,要多学、多练和理解知识,更要勤于总结。课堂上注意听讲,课下要及时复习,当日事当日毕。