9.HTML對象模型:HTML Document Object model簡稱HTMLdom
10.Javascript是一種基于對象(object)和事件驅(qū)動(Event Driven)并具有安全性能的腳本語言不能單獨存在,必須依附于HTML存在通過調(diào)入或嵌入主要基于客戶端運行的事件(Event):在主頁(HomePage)中執(zhí)行某種操作所產(chǎn)生的動作
Windows對象:open()、close()、alert()、confirm()、prompt()
11.Javascript內(nèi)置對象:string對象、Math對象、Date對象、Array對象、Event對象
時間對象:getDate、getDay、getHours、getMinutes、getMonth、getSeconds、getTime(以ms為單位)、getYear(以上全為當(dāng)前對象)、getTimeZone(當(dāng)前時區(qū)偏移信息)
12.Javascript中定義函數(shù)格式如下
Function funname(參數(shù)表){
執(zhí)行部分
Return(需要時寫)
}
13.Javascript中只有4 中數(shù)據(jù)類型:數(shù)值(整型、實型)、字符串型、布爾型、空值(null)
14.Javascript程序可放在:HTML網(wǎng)頁的body中、HTML網(wǎng)頁的head中、外部.js文件中
15.靜態(tài)聯(lián)編和動態(tài)聯(lián)編
Java采用靜態(tài)聯(lián)編--先編再執(zhí)sun公司
Javascript采用動態(tài)聯(lián)編--邊編邊執(zhí)是Netscape公司的產(chǎn)品,其前身是Oak語言
16.正則表達(dá)式:regular expression--res
主要用途:數(shù)據(jù)有效性驗證、查找和替換
17.數(shù)據(jù)庫操作步驟
@加載數(shù)據(jù)庫第三方驅(qū)動程序--加載數(shù)據(jù)庫連接包
@加載數(shù)據(jù)庫的驅(qū)動類
@與數(shù)據(jù)庫建立連接,并拿到這個連接對象
@通過Connection對象拿到數(shù)據(jù)庫的操作對象Statement
@編寫sql語句,通過操作對象發(fā)送對數(shù)據(jù)庫的操作命令,并返回操作結(jié)果
@關(guān)閉所有數(shù)據(jù)庫的連接
剖析該問題前請看如下代碼
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[]轉(zhuǎn)化十六進制的字符串,注意這里b[ i ] & 0xFF將一個byte和 0xFF進行了與運算,然后使用Integer.toHexString取得了十六進制字符串,可以看出
b[ i ] & 0xFF運算后得出的仍然是個int,那么為何要和 0xFF進行與運算呢?直接 Integer.toHexString(b[ i ]);,將byte強轉(zhuǎn)為int不行嗎?答案是不行的.其原因在于: 1.byte的大小為8bits而int的大小為32bits 2.java的二進制采用的是補碼形式
==================以下文字貌似有問題=================== 在這里先溫習(xí)下計算機基礎(chǔ)理論
byte是一個字節(jié)保存的,有8個位,即8個0、1。8位的第一個位是符號位,也就是說0000 0001代表的是數(shù)字1 1000 0000代表的就是-1
所以正數(shù)最大位0111 1111,也就是數(shù)字127 負(fù)數(shù)最大為1111 1111,也就是數(shù)字-128
上面說的是二進制原碼,但是在java中采用的是補碼的形式,下面介紹下什么是補碼
1、反碼:
一個數(shù)如果是正,則它的反碼與原碼相同;
一個數(shù)如果是負(fù),則符號位為1,其余各位是對原碼取反;
2、補碼:利用溢出,我們可以將減法變成加法
對于十進制數(shù),從9得到5可用減法:
9-4=5
因為4+6=10,我們可以將6作為4的補數(shù)
改寫為加法:
9+6=15(去掉高位1,也就是減10)得到5.對于十六進制數(shù),從c到5可用減法:
c-7=5
因為7+9=16 將9作為7的補數(shù)
改寫為加法:
c+9=15(去掉高位1,也就是減16)得到5.在計算機中,如果我們用1個字節(jié)表示一個數(shù),一個字節(jié)有8位,超過8位就進1,在內(nèi)存中情況為(100000000),進位1被丟棄。
⑴一個數(shù)為正,則它的原碼、反碼、補碼相同
⑵一個數(shù)為負(fù),剛符號位為1,其余各位是對原碼取反,然后整個數(shù)加1 的原碼為
100000011的補碼為
11111111
0的原碼為
00000000 0的反碼為
11111111(正零和負(fù)零的反碼相同)
+1 0的補碼為
100000000(舍掉打頭的1,正零和負(fù)零的補碼相同)
Integer.toHexString的參數(shù)是int,如果不進行&0xff,那么當(dāng)一個byte會轉(zhuǎn)換成int時,由于int是32位,而byte只有8位這時會進行補位,例如補碼11111111的十進制數(shù)為-1轉(zhuǎn)換為int時變?yōu)?*****11好多1啊,呵呵!即0xffffffff但是這個數(shù)是不對的,這種補位就會造成誤差。和0xff相與后,高24比特就會被清0了,結(jié)果就對了。
----Java中的一個byte,其范圍是-128~127的,而Integer.toHexString的參數(shù)本來是int,如果不進行&0xff,那么當(dāng)一個byte會轉(zhuǎn)換成int時,對于負(fù)數(shù),會做位擴展,舉例來說,一個byte的-1(即0xff),會被轉(zhuǎn)換成int的-1(即0xffffffff),那么轉(zhuǎn)化出的結(jié)果就不是我們想要的了。
而0xff默認(rèn)是整形,所以,一個byte跟0xff相與會先將那個byte轉(zhuǎn)化成整形運算,這樣,結(jié)果中的高的24個比特就總會被清0,于是結(jié)果總是我們想要的。
引言
昨天有個朋友問我long轉(zhuǎn)byte要怎么轉(zhuǎn),然后吃飯期間我問了身邊的人,發(fā)現(xiàn)也不會轉(zhuǎn)。所以我想有必要寫一些位操作符和轉(zhuǎn)化規(guī)則,同時還有一些不常用,但是源碼中經(jīng)常出現(xiàn)的操作符。不可能所有的都寫出來,但是舉一反三就可以了。在技術(shù)點中介紹一些不常用但是常見的操作符,后半部分展示實現(xiàn)轉(zhuǎn)化的代碼。筆者目前整理的一些blog針對面試都是超高頻出現(xiàn)的。大家可以點擊鏈接:http://blog.csdn.net/u012403290
技術(shù)點:
計算機中存儲是用補碼!,同時注意一下計算省略了高位不變部分
1、byte:有符號(意思是有正和負(fù)),在網(wǎng)絡(luò)傳輸中都是會用到byte的,它占1個字節(jié),共8位,比如說11111111就可以用1個byte表示,轉(zhuǎn)化為10進制:-(2的6次+2的5次+2的4次+2的3次+2的2次+2的1次+2的0次)=-127。其中前7位表示數(shù)字,最高位表示符號,0為正,1為負(fù)。范圍是(-2的7次 ~ 2的7次1)。
3、int :有符號,占4個字節(jié),共32位。它的取值范圍就是(-2的31次 ~ 2的31次)。
4、long:有符號,占8個字節(jié),共64位,它的取值范圍就是(-2的63次 ~ 2的63次)。
5、^:表示異或位運算,兩者相同則為0,兩者不同則為1。比如說15^2,15用二進制表示就是1111,2用2進制表示就是0010,兩者進行異或運算,結(jié)果就是1101,轉(zhuǎn)換為十進制就是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,兩者進行或運算,那么結(jié)果就是1111,轉(zhuǎn)換為十進制就是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,兩者進行與運算,那么結(jié)果就是0010,轉(zhuǎn)換為十進制就是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 注意:本來我打算不想解釋這塊的,但是學(xué)知識,既然要學(xué)了,就盡自己最大努力一次性一個知識點學(xué)透徹。我舉個例子,比如說-15|3等于多少呢?有些人會覺得-15轉(zhuǎn)化為二進制就是10001111,而3轉(zhuǎn)化為二進制就是00000011,那么結(jié)果應(yīng)該是10001111呀,轉(zhuǎn)換為十進制就是-15呀?大家可以自己寫個demo就會發(fā)現(xiàn)是不對的。要注意在計算機中所有的都是用補碼的形式存儲的,之所以上面介紹兩個正數(shù)是對的,因為正數(shù)的反碼和補碼都是一樣的。而負(fù)數(shù)求補碼應(yīng)該是出去符號位取反+1,我們再來看看這個題-15|3,其中-15的原碼為10001111,反碼為11110000,那么補碼就是11110001,然后3的補碼為00000011,兩者進行或操作就是11110011,你以為結(jié)束了么?還沒有,再又要求它的原碼了,原碼就是補碼再求補碼再+1(是不是已經(jīng)暈掉了?),也就是10001101,結(jié)果就是-13。為了大家都好理解,我這里用算式整理一下:
求-15|3
[-15]原碼 = 10001111
[-15]反碼 = 11110000 //原碼求反碼符號位不變
[-15]補碼 = 11110001 //反碼+1等于補碼
[3]原碼 = 00000011
[3]反碼 = 00000011 //正數(shù)都一致
[3]補碼 = 00000011 //正數(shù)都一致
-15|3 = 11110011 //兩個補碼進行或操作
[結(jié)果]補碼 = 11110011 //上面求得的值
[結(jié)果]反碼 = 10001100 //符號位不變
[結(jié)果]原碼 = 10001101 //反碼+1
100001101 轉(zhuǎn)化為十進制就是-13。
不知道我這么解釋會不會更加清楚一些呢?同理的,上面那些(尤其是求反‘~’我故意沒寫例子,大家自己去試試吧)。
在說一次,正數(shù)的原碼,補碼,反碼都一樣,如果一定要說為什么一樣,我就舉個例子。有這么一個等式7+(-7)=0。
我們知道
[-7]原 = 10000111 [-7]反 = 11111000 [-7]補 = 11111001
那么如果要存在一個值和[-7]補碼相加等于0,是不是就是00000111!所以正數(shù)的補碼和原碼是一致的。這樣解釋雖然怪怪的,但是可以知道的確是這樣的。
9、<<:左移運算符,不需要考慮符號位,因為在后面補0,把二進制的數(shù)字向左移動,低位補0。比如說 3<<2。3的二進制碼為11,向左移動2位就是1100,那么結(jié)果就是12。
10、>>:右移運算符,帶符號位。根據(jù)這個要移動的數(shù)字決定正負(fù),如果是正數(shù),那么就在前面補0,如果是負(fù)數(shù)就在前面補1。比如說 3>>2,3的二進制碼為00000011,向右移動2位,就變成00000000,轉(zhuǎn)化為十進制就是0了(3是正數(shù)所以在高位補0)。再比如說-3>>2,-3的二進制碼為10000011,轉(zhuǎn)化為補碼(只要涉及到負(fù)數(shù),就需要轉(zhuǎn)換到補碼計算,正數(shù)之所以不用轉(zhuǎn)化,是因為他們的補碼和原碼是一致的)11111101,進行位移運算,就是11111111,這個是補碼,需要再轉(zhuǎn)回原碼。那么就是取反+1,結(jié)果就是10000001,轉(zhuǎn)化為十進制就是-1。
11、>>>:右移運算符,與上面的區(qū)別就是這個運算符是無符號的。不論正負(fù),高位都補0。如果要用-3>>2來驗證,因為高位補0,就需要把所有的位數(shù)都寫全了。如果是int,那就要寫成32位來運算。切記切記。上面很多因為高位的變化“取反再取反”會導(dǎo)致前面所有的位都沒變所以我就簡化了,但是這個>>>運算符不行哦,它會把負(fù)數(shù)變?yōu)檎龜?shù)。
代碼實現(xiàn)
基本步驟:
①分析轉(zhuǎn)化和代轉(zhuǎn)化之間位數(shù)的關(guān)系
②計算偏移量。每次都取最后8位
③把最后8位和0xff進行&操作
④得出結(jié)果。
有人會問,為什么要和0xff進行&操作?這里我做一下解釋,因為再在割的時候,我們要保證最后8位是一致的,更高位都要置0,這樣才能保證數(shù)據(jù)的一致性。比如說由byte轉(zhuǎn)化成short。位數(shù)從8位變成了16位,那么在計算機自己看來,它會把前面多出來的8位置1。而&0xff就可以把前面所有的位數(shù)都置0。
1、short 與 byte互相轉(zhuǎn)化
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個字節(jié),所以要計算偏移量
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的轉(zhuǎn)化,甚至是long和short等之間的轉(zhuǎn)化大家自己琢磨??吹竭@里是不是覺得自己要學(xué)的東西很多,大學(xué)學(xué)過的都忘記了呢?沒關(guān)系,以后我會經(jīng)常給大家復(fù)習(xí)一些重要但是不常用的東西哦。
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。https://blog.csdn.net/u012403290/article/details/68943827 文章標(biāo)簽: 面試 位運算 位操作符 個人分類: java常見問題
北京股王8年不虧鐵律“1272”曝光,震驚眾人!陜西信息科技 · 頂新
想對作者說點什么? 我來說一句 java byte數(shù)組與short數(shù)組互相轉(zhuǎn)換
public static short[] toShortArray(byte[] src){ int count = src.length / 2;short[]...vk5176891 vk5176891 2016-10-11 10:43:04 閱讀數(shù):6969 java short to bytes /** *//** * @功能: 將一個short值轉(zhuǎn)為byte數(shù)組 * @參數(shù): short sNum
要轉(zhuǎn)的short值 * @返回值: byte[] bytesRet 轉(zhuǎn)后的byte數(shù)組...imuse imuse 2006-11-15 14:48:00 閱讀數(shù):3193 從前端到后臺,開發(fā)一個完整功能的小程序 微信開發(fā) | wanghui_777 java中l(wèi)ong,int,short與byte數(shù)組之間的轉(zhuǎn)換
Java學(xué)習(xí)總結(jié)
在學(xué)習(xí)了三周的Java基礎(chǔ)編程語言之后,我對Java有了一定的了解。Java是由Sun公司推出的一種面向?qū)ο蟮某绦蛟O(shè)計語言,現(xiàn)在被廣泛應(yīng)用于很多領(lǐng)域。最讓我關(guān)注的一點,Java是一種開放性的技術(shù),簡稱開源,與其它的編程語言相比,我始終覺得它更具有優(yōu)勢,并且容易掌握。同時,通過孟老師幽默風(fēng)趣的講解方式,讓我對Java的學(xué)習(xí)更加的感興趣。
第一周,我們主要學(xué)習(xí)了Java的基本概念,分支結(jié)構(gòu),循環(huán)結(jié)構(gòu)以及數(shù)組。基本概念可分為以下三個部分:
(一).常量、變量、表達(dá)式。所謂常量,就是運行期間不可以改變的量,比如圓周率。變量,代表一塊存儲區(qū)域,并且存儲區(qū)域的值是可以改變的,比如客房。通常變量的定義具有一定的規(guī)則,簡稱"變量三要素",變量類型變量名 = 初始值;
變量名的命名規(guī)則需要遵循:
1.智能由數(shù)字、字母、下劃線及美元符組成,并且不能以數(shù)字開頭。
2.不能重復(fù)定義已經(jīng)定義過的變量名。
3.不能使用系統(tǒng)保留字。
4.要見名知意。
表達(dá)式:由常量、變量、運算符組成,并且每個表達(dá)式都會有一個返回值。其中運算符包含:+、-、*、/、%、++、--、=,符合運算符包含:+=、-=、*=、/*、%=,例如a += b → a = a + b。
(二).Java注釋,單行注釋,以//開始的行。多行注釋,用/*和*/界定的行
(三).Java基礎(chǔ)數(shù)據(jù)類型,整數(shù)類int,浮點型float,文本類char。
分支結(jié)構(gòu):Boolean類型,非真即假數(shù)據(jù)類型,只存在True或False。
(一).條件表達(dá)式:
關(guān)系表達(dá)式,重點在于關(guān)系運算符的掌握,>、<、>=、<=、==、!=,其返回值為boolean類型;
邏輯表達(dá)式,邏輯與(&&),邏輯或(||),邏輯非(!),其返回值為boolean類型;條件運算符,?:→表達(dá)式A?表達(dá)式B:表達(dá)式C,表達(dá)式A為真,則結(jié)果為B,表達(dá)式A為假,則結(jié)果為C。
==========Java學(xué)習(xí)總結(jié)=========
從3月8號開班以來我們已經(jīng)學(xué)習(xí)Java 有3個多月了,主要學(xué)習(xí)了Java基礎(chǔ)知識、OOP(面向?qū)ο?、JavaSE、ORACLE(數(shù)據(jù)庫)、JDBC WebBasic、JQUERY、ServletJsp和一些常用的框架。
一、Java基礎(chǔ)知識
主要學(xué)習(xí)了Java變量的定義、基本類型、運算符和表達(dá)式、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)、數(shù)組和方法等。
二、OOP OOP是學(xué)習(xí)Java中的重中之重,是Java編程的核心思想。Java中一切皆對象,圍繞著面向?qū)ο蟮娜筇匦哉归_,封裝性、繼承性和多態(tài)性是OOP三大特性。引入了對象、類、內(nèi)存管理、抽象類、接口、內(nèi)部類等概念,在學(xué)習(xí)面向?qū)ο蟮奶匦詴r學(xué)習(xí)了方法的重載、方法重寫等知識。最后,學(xué)習(xí)了一些常見關(guān)鍵字(static、final、import、protected等)的特點、作用和使用環(huán)境。
三、JavaSE
JavaSE學(xué)習(xí)分為兩部分,其一是學(xué)習(xí)Java中一些常用的API、正則表達(dá)式、日期操作、集合操作、包裝類、文件操作。第二部分主要學(xué)習(xí)了基本的IO文本數(shù)據(jù)操作、異常處理、多線程基礎(chǔ)知識、TCP和UDP通信,最后學(xué)習(xí)了可擴展標(biāo)記語言XML的語法和用法。
四、ORACLE(數(shù)據(jù)庫)Oracle數(shù)據(jù)庫主要學(xué)習(xí)了數(shù)據(jù)庫原理、常用的操作語句(DDL、DML、DCL等)、Oracle操作(字符串、數(shù)值、日期、控制操作)、SQL的查詢(基礎(chǔ)、關(guān)聯(lián)、高級查詢),最后簡要學(xué)習(xí)了視圖、序列、索引和約束。
五、JDBC 主要知識JDBC原理、JDBC的核心API、JDBC編程操作和DAO。
六、WebBasic WebBasic的學(xué)習(xí)主要分為以下幾點:
1)Web概述、HTML的簡述、文本處理、圖像和超鏈接、表格和表單的使用處理。
2)CSS部分:主要包含 CSS的一些概念知識,CSS的聲明、語法和CSS的一些常用的選擇器。
3)JavaScript:JavaScript基礎(chǔ)知識概述,JavaScript對象的概述和對象應(yīng)用的場合。
七、JQUERY jQuery概念的介紹,jQuery選擇器,jQuery操作DOM、事件處理和jQuery動畫。
八、ServletJSP 1)Servlet基礎(chǔ)知識概述、Servlet的換工作原理、Servlet的特性,HTTP協(xié)議和容器對路徑的處理。2)①JSP的基本的語法、運行原理,JSP中的轉(zhuǎn)發(fā)、重定向的使用和區(qū)別及JSP開發(fā)中的常見的問題。②JSP的狀態(tài)管理分為cookie和session,JSP中的過濾器和監(jiān)聽器,EL表達(dá)式和JSTL表達(dá)式。
九、常用的應(yīng)用開發(fā)框架 1)Spring框架:Spring容器、Spring的IOC,Spring的參數(shù)注入、基于注解的組件掃描,Spring Web MVC簡介和應(yīng)用。Spring對JDBC的整合支持,Spring+JDBCTemplate.2)MyBatis框架介紹和應(yīng)用,Spring與MyBatis的整合及其應(yīng)用。3)Ajax的簡介和使用,Ajax在編碼中會產(chǎn)生的一些問題。使用JSON實現(xiàn)數(shù)據(jù)交互,jQuery對Ajax的支持。
學(xué)習(xí)心得:我覺得學(xué)習(xí)Java是一個循序漸進的過程,要堅持不懈、有始有終。Java學(xué)習(xí)是一個系統(tǒng)性的學(xué)習(xí),要多學(xué)、多練和理解知識,更要勤于總結(jié)。課堂上注意聽講,課下要及時復(fù)習(xí),當(dāng)日事當(dāng)日畢。