二進(jìn)制一個熟悉又很陌生的東西,貌似現(xiàn)在的應(yīng)用程序員用的真的很少,現(xiàn)在都用高級語言來開發(fā)程序,誰還用到二進(jìn)制,八進(jìn)制,十六進(jìn)制,給我的感覺那就是這些都是那些c,c++寫一些底層交互的程序員干的事,向c,c++大神致敬,今天班門弄斧了,既然感到陌生,那我們就來研究下這個東西,純屬個人興趣愛好而已。
http://www.360doc.com/content/17/0227/22/8067272_632545159.shtml
2.什么是二進(jìn)制
[圖片上傳失敗...(image-1ab4e5-1520174111171)]
二進(jìn)制是計算技術(shù)中廣泛采用的一種[數(shù)制](http://baike.baidu.com/view/7926.htm)。[二進(jìn)制數(shù)](http://baike.baidu.com/view/1349.htm)據(jù)是用0和1兩個[數(shù)碼](http://baike.baidu.com/view/29459.htm)來表示的數(shù)。它的基數(shù)為2,進(jìn)位規(guī)則是“逢二進(jìn)一”,借位規(guī)則是“借一當(dāng)二”,由18世紀(jì)德國數(shù)理哲學(xué)大師[萊布尼茲](http://baike.baidu.com/view/20062.htm)發(fā)現(xiàn)。當(dāng)前的[計算機(jī)系統(tǒng)](http://baike.baidu.com/view/1130583.htm)使用的基本上是[二進(jìn)制系統(tǒng)](http://baike.baidu.com/view/3421792.htm),數(shù)據(jù)在[計算機(jī)](http://baike.baidu.com/view/3314.htm)中主要是以補(bǔ)碼的形式存儲的。計算機(jī)中的二進(jìn)制則是一個非常微小的開關(guān),用“開”來表示1,“關(guān)”來表示0。
信息的存儲單位
位(Bit) :度量數(shù)據(jù)的最小單位
字節(jié)(Byte):最常用的基本單位,一個字節(jié)有8位
b7 b6 b5 b4 b3 b2 b1 b0
1 0 0 1 0 1 0 1 =27+24+22+20=149
K字節(jié) 1k=1024 byte
M(兆)字節(jié) 1M=1024K
G(吉)字節(jié) 1G=1024M
T(太)字節(jié) 1T=1024G
曾經(jīng)聽人說,一個c,c++大神,就靠輸入,0和1就可以裝好操作系統(tǒng),不知道是不是真的,嘿嘿
3.十進(jìn)制轉(zhuǎn)換
1234[10進(jìn)制] 0 1 2 3 4 5 6 7 8 9 0 當(dāng)數(shù)位上的值超過9就要進(jìn)1
1000+200+30+4=1103+2102+3101+4100=1234
1011[2進(jìn)制] 0 1 當(dāng)數(shù)位上的值超過1就要進(jìn)1
123+022+121+120=8+0+2+1=11
1011[8進(jìn)制]0 1 2 3 4 5 6 7 當(dāng)數(shù)位上的值超過7就要進(jìn)1
183+181+1*80=512+8+1=521
1011[16進(jìn)制]0 1 2 3 4 5 6 7 8 9 A B C D E F 當(dāng)數(shù)位上的值超過15就要進(jìn)1
1163+1161+1*160=4096+16+1=4113
當(dāng)然其他進(jìn)制轉(zhuǎn)換成10進(jìn)制是最簡單的了,我想聰明的你肯定會了。
4.二進(jìn)制轉(zhuǎn)換
首先來看十進(jìn)制到二進(jìn)制:除2取余數(shù) 最后把余數(shù)倒過來 100101
比如:十進(jìn)制數(shù)37
所以轉(zhuǎn)換成的二進(jìn)制數(shù)字為:100101
再來八進(jìn)制到二進(jìn)制:一個八進(jìn)制的位拆分成一個三位的二進(jìn)制數(shù)
比如:[八進(jìn)制]616
6拆分成 110
1拆分成 001
6拆分成 110
所以轉(zhuǎn)換成的二進(jìn)制數(shù)字為:110001110
再來十六進(jìn)制到二進(jìn)制:一個八進(jìn)制的位拆分成一個四位的二進(jìn)制數(shù)
比如:[十六進(jìn)制]616
6拆分成 0110
1拆分成 0001
6拆分成 0110
所以轉(zhuǎn)換成的二進(jìn)制數(shù)字為:11000010110
5.八進(jìn)制轉(zhuǎn)換
十進(jìn)制到八進(jìn)制:除8取余數(shù) 最后把余數(shù)倒過來
同時我們也可以先將十進(jìn)制轉(zhuǎn)換成二進(jìn)制,然后將二進(jìn)制又轉(zhuǎn)換成八進(jìn)制
比如:2456 轉(zhuǎn)化成八進(jìn)制數(shù)字:4630
2456/8=307,余0;
307/8=38,余3;
38/8=4,余6;
4/8=0,余4。
將所有余數(shù)倒序相連,得到結(jié)果:4630。
因此十進(jìn)制的2456轉(zhuǎn)換為八進(jìn)制結(jié)果為4630。
二進(jìn)制到八進(jìn)制轉(zhuǎn)換 7=4+2+1 111 八進(jìn)制最大的數(shù)字是7轉(zhuǎn)換成二進(jìn)制剛好是111,占3個位
每三個二進(jìn)制數(shù)為一組,轉(zhuǎn)成一個八進(jìn)制數(shù)位,如果二進(jìn)制高位不足3位時,用零填補(bǔ)。
比如:10011011
010 011 011
2 3 3
因此二進(jìn)制的10011011轉(zhuǎn)換為八進(jìn)制結(jié)果為233。
十六進(jìn)制到八進(jìn)制
我們可以先把十六進(jìn)制的數(shù)字轉(zhuǎn)換成二進(jìn)制,在從二進(jìn)制轉(zhuǎn)換成八進(jìn)制例如:
3BC24
分別對應(yīng)到二進(jìn)制就是:
3 0011
B 1011
C 1100
4 0100
連起來就是:
0011 1011 1100 0100
再按照每三個一組分組:
0 011 101 111 000 100
0__3__5__7__0__4
所以8進(jìn)制就是35704
6.十六進(jìn)制轉(zhuǎn)換
十進(jìn)制到十六進(jìn)制:除16倒著取余數(shù)
同時我們也可以先將十進(jìn)制轉(zhuǎn)換成二進(jìn)制,然后將二進(jìn)制又轉(zhuǎn)換成十六進(jìn)制
比如說:1610轉(zhuǎn)換成十六進(jìn)制
直接轉(zhuǎn)16進(jìn)制:
1610/16=100……10(A);
100 /16= 6……4;
6 /16= 0……6;
故:1610(10)=64A(16).
二進(jìn)制到十六進(jìn)制 15=8+4+2+1 1111 十六進(jìn)制最大數(shù)字是F,即15轉(zhuǎn)換成二進(jìn)制1111,剛好占4個位
每四個二進(jìn)制數(shù)為一組,轉(zhuǎn)成一個十六進(jìn)制數(shù)位,如果二進(jìn)制高位不足3位時,用零填補(bǔ)。
比如:1110011011
0011 1001 1011
3 9 B
因此二進(jìn)制的 1110011011轉(zhuǎn)換為十六進(jìn)制39B
八進(jìn)制到十六進(jìn)制
我們可以先把八進(jìn)制的數(shù)字轉(zhuǎn)換成二進(jìn)制,在從二進(jìn)制轉(zhuǎn)換成十六進(jìn)制
八進(jìn)制的:1234567
轉(zhuǎn)換為二進(jìn)制是每個數(shù)字轉(zhuǎn)換為三位二進(jìn)制:001 010 011 100 101 110 111
然后把這些數(shù)字從右邊開始進(jìn)行按四位分組:0 0101 0011 1001 0111 0111
然后從右邊每四位組依次對應(yīng)一個16進(jìn)制數(shù):053977
7.各種進(jìn)制的用途
說了這么多,這些進(jìn)制都有些什么用了,大家一起討論下吧!!!
10進(jìn)制,當(dāng)然是便于我們?nèi)祟悂硎褂茫覀儚男〉牧?xí)慣就是使用十進(jìn)制,這個毋庸置疑。
2進(jìn)制,是供計算機(jī)使用的,1,0代表開和關(guān),有和無,機(jī)器只認(rèn)識2進(jìn)制。
16進(jìn)制,內(nèi)存地址空間是用16進(jìn)制的數(shù)據(jù)表示, 如0x8049324。
編程中,我們常用的還是10進(jìn)制。
比如:int a = 100,b = 99;
不過,由于數(shù)據(jù)在計算機(jī)中的表示,最終以二進(jìn)制的形式存在,所以有時候使用二進(jìn)制,可以更直觀地解決 問題。但二進(jìn)制數(shù)太長了。比如int 類型占用4個字節(jié),32位。比如100,用int類型的二進(jìn)制數(shù)表達(dá)將是:
0000 0000 0000 0000 0110 0100
面對這么長的數(shù)進(jìn)行思考或操作,沒有人會喜歡。因此,用16進(jìn)制或8進(jìn)制可以解決這個問題。因為,進(jìn)制越大,數(shù)的表達(dá)長度也就越短。
1.用于計算機(jī)領(lǐng)域的一種重要的數(shù)制
2.對計算機(jī)理論的描述,計算機(jī)硬件電路的設(shè)計都是很有益的。比如邏輯電路設(shè)計中,既要考慮功能的完備,還要考慮用盡可能少的硬件,十六進(jìn)制就能起到一些理論分析的作用。比如四位二進(jìn)制電路,最多就是十六種狀態(tài),也就是一種十六進(jìn)制形式,只有這十六種狀態(tài)都被用上了或者盡可能多的被用上,硬件資源才發(fā)揮了盡可能大的作用。
3.十六進(jìn)制更簡短,因為換算的時候一位16進(jìn)制數(shù)可以頂4位2進(jìn)制數(shù)。
8進(jìn)制,一般有什么用,查了下資料,還真不知道?有知道的大神告訴我吧。
如果你用過linux你可能見過這樣表示一個文件的權(quán)限:0777、0666等等
可能有的這樣解釋:具有讀權(quán)限加1,具有寫權(quán)限加2,具有執(zhí)行權(quán)限加4,最后的和就是一個角色所具有的權(quán)限。而linux有三種角色:屬主、屬組、其他用戶,所以用0777、0666之類的表示。
如果用二進(jìn)制來看的話,linux用3個bit來表示權(quán)限,如果具有某個權(quán)限就把那位置1.比如只具有讀權(quán)限就是100,只具有寫權(quán)限就是010,具有讀寫權(quán)限就是110,具有讀寫執(zhí)行權(quán)限就是111。
package com.suypower.chengyu.test;
public class ByteTest {
/**
- byte 8 bits -128 - + 127
- 1 bit = 1 二進(jìn)制數(shù)據(jù)
- 1 byte = 8 bit
- 1 字母 = 1 byte = 8 bit(位)
- 1 漢字 = 2 byte = 16 bit
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
byte b1 = 127;
byte b2 = -128;
byte b3 = 'a';
byte b4 = 'A'; // 一個字母 = 1 byte = 8 bit
// byte b5 ='aa'; 這就錯了
// byte b6 ='中'; 這就錯了 一個漢字 2個字節(jié) 16bit
short s1 = '啊'; // 一個漢字 2個字節(jié) 16bit short 是 16 bit位的
// short s2 = '漢字'; // 2個漢字 4個字節(jié) 32 bit int 是32 bit的
// int i1 = '漢字'; 但是 int 是數(shù)字類型的 , char 是 16 bit的 = 2 byte = 一個漢字
char c1 = '汗';
// byte 轉(zhuǎn)換 string
String string = "中文";
byte by[] = string.getBytes();
String str = new String(by);
System.out.println("str="+str);
}
}
==================================================================================
[Java-原創(chuàng)] bit、byte、位、字節(jié)、漢字、字符
bit、byte、位、字節(jié)、漢字的關(guān)系
1 bit = 1 二進(jìn)制數(shù)據(jù)
1 byte = 8 bit
1 字母 = 1 byte = 8 bit
1 漢字 = 2 byte = 16 bit
bit:位
一個二進(jìn)制數(shù)據(jù)0或1,是1bit;byte:字節(jié)
存儲空間的基本計量單位,如:MySQL中定義 VARCHAR(45) 即是指 45個字節(jié);
1 byte = 8 bit一個英文字符占一個字節(jié);
1 字母 = 1 byte = 8 bit一個漢字占2個字節(jié);
1 漢字 = 2 byte = 16 bit-
標(biāo)點符號
A>. 漢字輸入狀態(tài)下,默認(rèn)為全角輸入方式;
B>. 英文輸入狀態(tài)下,默認(rèn)為半角輸入方式;C>. 全角輸入方式下,標(biāo)點符號占2字節(jié);
D>. 半角輸入方式下,標(biāo)點符號占1字節(jié);故:漢字輸入狀態(tài)下的字符,占2個字節(jié) (但不排除,自己更改了默認(rèn)設(shè)置);
英文輸入狀態(tài)下的字符,占1個字節(jié) (但不排除,自己更改了默認(rèn)設(shè)置);