字符編碼--第1章 基礎知識

第1章 基礎知識git

 

第1節   二進制網絡

1. 二進制編碼

1697年,德國數理哲學大師萊布尼茲發現二進制。基數爲2,逢2進位的計數方法,0、1是它的基本數字符號。由於它只使用0、1兩個數字符號,很是簡單方便,易於用電子方式實現,在電腦上廣泛採用。除二進制(B)外,在電腦上經常使用的還有八進制(O)、十進制(D)和十六進制(H)等。spa

 

2.二進制轉換爲十進制.net

  各位二進制數與其對應權值的乘積之和即爲與該二進制相對應的十進制。blog

 

例: 110011.101B內存

=25+24+21+20+2-1+2-3get

=51.625D編譯器

 

3.十進制轉換爲二進制數學

降冪法:首先寫出要轉換的十進制數,其次寫出全部小於此數的各位二進制權值,而後用要轉換的十進制數減去與它最接近的二進制權值,如夠減則減去並在相應位記以1;如不夠減則在相應位記以0並跳過此位;如此不斷重複,直到該數爲0爲止。

 

例:將十進制數117轉換爲二進制數計算過程以下:

小於117的二進制權爲64 32 16 8 4 2 1

因此117的二進制爲1110101。

 

  除法:把要轉換的十進制數的整數部分不斷除以2,並記下餘數,直到商爲0爲止。

 

例:將十進制數117轉換爲二進制數計算過程以下:

因此117的二進制爲1110101。

 

計算機中的二進制則是一個很是微小的開關,用「開」來表示1,「關」來表示0。

 

第2節 位

位,英文名稱是Bit,亦稱二進制數位,指二進制中的一位,是計算機存儲的最小單位。Bit是Binary digit(二進制數位)的縮寫,由數學家John Wilder Tukey提出(多是1946年提出,但有資料稱1943年就提出了)。這個術語第一次被正式使用,是在香農著名的論文《通訊的數學理論》(A Mathematical Theory of Communication)第1頁中。

不一樣進位制下一位的信息量並不老是一個二進位,例如八進制的7轉換成二進制後就成了111。(7=2*2+2+1=10*10+10+1=100+10+1=111)

 

第3節 字節

字節,英文名稱是Byte。一個字節表明八個位。一般用做計算機信息計量單位,與具體的數據類型無關。現代計算機中連續的、固定數量的比特(二進制)。

八個二進制數位常常在規範中被稱爲Octet(八位組),例如在一些工業標準、網絡及電信技術裏。Byte(字節)可被縮寫成B,例如MB表示Megabyte;Bit(位元)可被縮寫成b,例如Mb表示Megabit。法語國家有時把「o」用於「octet」。不少人不接受,由於這在國際單位制中有與零混淆的風險。

到目前爲止字節制單位及換算:

1字節(Byte)=8比特(bit)=8位

1KB=1024B byte字節

1MB=1024KB Kilobyte千字節

1GB=1024MB Megabyte兆字節

1TB=1024GB Gigabyte吉字節

1PB=1024TB Terabyte太字節

1EB=1024PB Petabyte拍字節

1ZB=1024EB Exabyte艾字節       

1YB=1024ZB Zettabyte澤字節

1BB=1024YB YottaByte堯字節

1NB=1024BB Brontobyte

1DB = 1024NB NonaByte

1CB = 1024DB DoggaByte

1XB = 1024CB

C語言各數據類型佔用內存的大小(與編譯器有關)

#include <stdio.h>

 

int main(int argc, char * argv[]) {

        printf("sizeof(char)  =%dbyte.\n", sizeof(char));

        printf("sizeof(short) =%dbytes.\n", sizeof(short));

        printf("sizeof(int)   =%dbytes.\n", sizeof(int));

        printf("sizeof(long)  =%dbytes.\n", sizeof(long));

        printf("sizeof(float) =%dbytes.\n", sizeof(float));

        printf("sizeof(double)=%dbytes.\n", sizeof(double));

        return 0;

}

 

sizeof(char)  =1byte.

sizeof(short) =2bytes.

sizeof(int)   =4bytes.

sizeof(long)  =4bytes.

sizeof(float) =4bytes.

sizeof(double)=8bytes.

 

第4節 十六進制

十六進制(簡寫爲hex或下標16)是一種基數爲16,逢16進1的計數方法,通常用數字0到9和字母A到F表示(其中:A~F即10~15)。例如十進制數57,在二進制寫做111001,在16進制寫做39。在歷史上,中國曾經在重量單位上使用過16進制,好比,規定16兩爲一斤。

有些時候用二進制表示數不太方便(代碼很長),因此常常採用十六進制表示法, 4位二進制數可用1位十六進制數來表示。由於將4個位(Bit)很容易轉化成單獨的16進制數字, 16進制廣泛應用在計算機領域。1字節能夠表示成2個連續的16進制數字。但是,這種混合表示法容易使人混淆,所以須要一些字首(0x)、字尾(H)或下標(16)來顯示。

 

1.二進制數和十六進制數之間的轉換

因爲十六進制數的基數是2的冪,因此這兩種數制之間的轉換十分容易。

 

例: 0011  0101  1011 1111

  3   5   B   F

即 0011010110111111B = 35BFH

 

例: A    1    9   C

1010  0001  1001 1100

即 A19CH = 1010000110011100B

 

2.十六進制數轉換爲十進制數

  各位十六進制數與其對應權值的乘積之和即爲與該十六進制數相對應的十進制數。

 

例:8AB4H

=8×163+10×162+11×161+4×160

=32768+2560+176+4

=35508D

 

3.十進制數轉換爲十六進制數

  轉換方法與十進制轉換爲二進制的方法相似。

  降冪法:首先寫出要轉換的十進制數,其次寫出小於該數的十六進制權值,而後找出該數中包含多少個最接近它的權值的倍數,這一倍數即對應位的值,用原數減去此倍數與相應位權值的乘積獲得一個差值,再用此差值去找低一位的權值的倍數,如此反覆直到差值爲0爲止。

 

例:將十進制數48956轉換爲十六進制數計算過程以下:

小於48956的十六進制權值爲 4096  256  16  1

因此48956的十六進制爲BF3CH。

 

  除法:把要轉換的十進制數的整數部分不斷除以16,並記下餘數,直到商爲0爲止。

  

例:將十進制數48956轉換爲十六進制數計算過程以下:

48956 / 16 = 3059 12 C

3059 / 16 = 191 3 3

191 / 16 = 11 15 F

11/ 16 = 0 11 B

因此48956的十六進制爲BF3CH。

十進制轉換爲十六進制

#include <stdio.h>

 

int main(int argc, char * argv) {

char ch;

ch = 11;

    printf("11=%X\n", ch);

    return 0;

}

 

11=B

第5節 二進制數和十六進制數的運算

包括算術運算和邏輯運算。

1.算術運算

    二進制數的運算:

              加法規則:         乘法規則:

              0 + 0 = 0          0  0 = 0

              0 + 1 = 1          0  1 = 0

              1 + 0 = 1          1  0 = 0

              1 + 1 = 0(進位1)      1  1 = 1

 

  十六進制數的運算:十六進制的加、減、乘、除與十進制相似。

 

2.邏輯運算

  全部的邏輯運算都是按位操做的。

  「與」運算(AND)

  「或」運算(OR)

  「非」運算(NOT)

  「異或」運算(XOR)

 

  例:X=00FFH,Y=5555H,Z1=XY,Z2=XY,Z3=,Z4=XY,求Z一、Z二、Z三、Z4的值。

 

     解:X = 0000 0000 1111 1111

       Y = 0101 0101 0101 0101

       Z1= 0000 0000 0101 0101 = 0055H

       Z2= 0101 0101 1111 1111 = 55FFH

       Z3= 1111 1111 0000 0000 = FF00H

       Z4= 0101 0101 1010 1010 = 55AAH

 

2015/12/18 追加

十進制小數的二進制,八進制,十六進制轉換方法

http://my.oschina.net/dubenju/blog/535161

 

字符編碼--第2章 數的存儲

相關文章
相關標籤/搜索