原文地址:C# int转换成byte数组原理作者:soso

C# int转换成byte数组原理

例如int 300,因为int占4字节,所以byte数组长度为4,先将300转换成二进制:

00000000 00000000 00000001 00101100,然后将每个字节转换成十进制由低到高存入byte数组中,所以最后结果是44 1 0 0 ,byte[0]=44 byte[1]=1 byte[2]=0 byte[3]=0

 

 

二进制转十进制,十进制转二进制的算法

位(bit)  一位二进制数,又称比特

字节(byte)  1B = 8b  内存存储的最小单元

字长:同一时间内,计算机能处理的二进制位数

字长决定了计算机的运算精度,字长越长,计算机的运算精度就越高。因此,高性能的计算机,其字长较长,而性能较差的计算机,其字长相对要短一些。    
其次,字长决定了指令直接寻址的能力。一般机器的字长都是字节的1、2、4、8倍。微机的字长为8位、16位、32位、64位,如286机为16位机,386和486是32位机,最新推出的PIII为64位高档机。    
字长也影响机器的运算速度,字长越长,运算速度越快。 
字:是计算机中处理数据或信息的基本单位。一个字由若干字节组成,通常将组成一个字的位数叫做该字的字长。

进制
一位八进制数字可以用三位二进数来表示,一位十六进制数可以用四位二进数来表示,所以二进制和八进制、十六进制间的转换非常简单


如:将(1010111.01101)2转换成八进制数

    1010111.01101=001 010 111. 011 010

               ↓ ↓ ↓ ↓ ↓

                 1  2    7     3    2

所以(1010111.011.1)2=(127.32)8

 

将(327.5)8转换为二进制

3       2      7.     5

↓     ↓    ↓    ↓

011    010   111.   101

    所以(327.5)8=(11010111.101)2

将(110111101.011101)2转换为十六进制数

(110111101.011101)2=0001   1011   1101.   0111   0100

                      ↓      ↓      ↓       ↓       ↓

                       1   B       D        7      4

所以(110111101.011101)2=(1BD.74)16

 

将(27.FC)16转换成二进制数

  2       7.     F        C    

↓    ↓    ↓     ↓    

0010  0111  1111   1100

所以(27.FC)16=(100111.111111)2

 二进制表示

原码:每一位表示符号

反码:正数同原码,负数除符号外其它位相反

补码:正数同原码,负数除符号外,反码+1得到

地址总线:
地址总线宽度决定了CPU可以访问的物理地址空间,简单地说就是CPU到底能够使用多大容量的内存

8位地址总线:一个8位的二进制数最多能表示2的8次方个数据,从00000000到11111111,十进制为0-255,这样,8位地址总线最大能区分的地址是从0到255。我们说他的寻址能力为256, 即256字节

16位地址总线:64K

20位: 1M

32位: 4G

上面是不同地址总线,能访问的物理内存。注意:计算时,如16位地址总线的寻址能力不是16个1组成的二进制数的结果,而是要再加上1,因为前面有个00000000000000000    
即2的16次方, 而16个1组成的二进制数为2的16次方减1


其他:

十进制转二进制: 
用2辗转相除至结果为1 
将余数和最后的1从下向上倒序写 就是结果 
例如302 
302/2 = 151 余0 
151/2 = 75 余1 
75/2 = 37 余1 
37/2 = 18 余1 
18/2 = 9 余0 
9/2 = 4 余1 
4/2 = 2 余0 
2/2 = 1 余0 
故二进制为100101110 

二进制转十进制 
从最后一位开始算,依次列为第0、1、2...位 
第n位的数(0或1)乘以2的n次方 
得到的结果相加就是答案 
例如:01101011.转十进制: 
第0位:1乘2的0次方=1 
1乘2的1次方=2 
0乘2的2次方=0 
1乘2的3次方=8 
0乘2的4次方=0 
1乘2的5次方=32 
1乘2的6次方=64 
0乘2的7次方=0 
然后:1+2+0 
+8+0+32+64+0=107. 
二进制01101011=十进制107. 

一、二进制数转换成十进制数 
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。 

二、十进制数转换为二进制数 
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。 
1. 十进制整数转换为二进制整数 
十 进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数, 如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。 

2.十进制小数转换为二进制小数 
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。 
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。 
回答者:HackerKinsn - 试用期 一级 2-24 13:31

1.二进制与十进制的转换 
(1)二进制转十进制<BR>方法:"按权展开求和" 
例: 
(1011.01)2 =(1×23+0×22+1×21+1×20+0×2-1+1×2-2)10 
=(8+0+2+1+0+0.25)10 
=(11.25)10 
(2)十进制转二进制 

· 十进制整数转二进制数:"除以2取余,逆序输出" 
例: (89)10=(1011001)2 
2 89 
2 44 …… 1 
2 22 …… 0 
2 11 …… 0 
2 5 …… 1 
2 2 …… 1 
2 1 …… 0 
0 …… 1 
· 十进制小数转二进制数:"乘以2取整,顺序输出" 
例: 
(0.625)10= (0.101)2 
0.625 
X 2 
1.25 
X 2 
0.5 
X 2 
1.0 
2.八进制与二进制的转换 
例:将八进制的37.416转换成二进制数: 
37 . 4 1 6 
011 111 .100 001 110 
即:(37.416)8 =(11111.10000111)2 
例:将二进制的10110.0011 转换成八进制: 
0 1 0 1 1 0 . 0 0 1 1 0 0 
2 6 . 1 4 
即:(10110.011)2 =(26.14)8 
3.十六进制与二进制的转换<BR>例:将十六进制数5DF.9 转换成二进制: 
5 D F . 9 
0101 1101 1111.1001 
即:(5DF.9)16 =(10111011111.1001)2 

例:将二进制数1100001.111 转换成十六进制: 
0110 0001 . 1110 
6 1 . E 
即:(1100001.111)2 =(61.E)16




二进制转十进制、十进制转十六进制

二进制转十进制、十进制转十六进制及其他各进制的转换方法2009-03-22 09:51二进制转换十进制

首选二进制转其它进制:

二进制数第0位的权值是20次方,第1位的权值是21次方……

例如,设有一个二进制数:0110 0100,转换为10进制为:

下面是竖式:

0110 0100 换算成 十进制

从右边位数开始数起:

0 0 x 2^0 = 0

1 0 x 2^1 = 0

2 1 x 2^2 = 4

3 0 x 2^3 = 0

4 0 x 2^4 = 0

5 1 x 2^5 = 32

6 1 x 2^6 = 64

7 0 x 2^7 = 0

--------------------------

(0110 0100)B=(100)D

注:数字后面相应的字母表示不同的进位制。B表示二进制,O表示八进制,D表示十进制,H表示十六进制。

八进制转换十进制

八进制就是逢81

八进制数采用 07这八数来表达一个数。

八进制数第0位的权值为80次方,第1位权值为81次方,第2位权值为82次方……

所以,设有一个八进制数:1507,转换为十进制为:

用竖式表示:

1507换算成十进制。

0 7 x 8^0 = 7

1 0 x 8^1 = 0

2 5 x 8^2 = 320

3 1 x 8^3 = 512

--------------------------

(1507)O=(839)D

同样,我们也可以用横式直接计算:

7 X 8^0 + 0 X 8^1 + 5 X 8^2 + 1 x 8^3 = (839)D

结果是,八进制数1507 转换成十进制数为 839

十六进制转换为十进制

十六进制的各字母所代表的数字是:A(10)B(11)C(12)D(13)E(14)F(15)

同样可以用上面的竖式来表示(这里就略了)

横式表示如下

(ABC.8C)H=10x16^2+11x16^1+12x16^0+8x16^-1+12x16^-2

=2560+176+12+0.5+0.046875

=(2748.546875)D

 

 

 

十进制转换为二进制、八进制、十六进制

十进制转为其它进制要分为两部份,因为十进制有小数跟整数部份,所以要分两步:

1.整数部分除R取余

例:(125)D=(1111101)B

这里是用短除法来完成的,换句话说:除R取余“R”就是进制数,如果是二进制就R=2,同理八进制就R=8

R=2    被除数    余数       余数的获取

2       125             1             125-2X62=1      最低位

2       62             0             62-2X31=0

2       31              0           31-2X15=1

2       15              1           15-2X7=1

2       7               1             7-2X3 =1

2       3                 1             3-2X1=1

2       1                1             1-2X0=1         最高位

 

结果:(125)D=(1111101)B

注:余数中最后得到的余数为最高位,最先得到的余数为最低位,从高到低依次排列。

同理十进制转换为八进制时:只要更改R的值就可以。此处不重复。

 

2.小数部分乘R取整

例:(0.25)D

0.25

X 2               0

_______________

0.50 (整数部分0为高位)

X 2           0

_______________                (从上往下写)

                  1

1.00 (整数部分1为低位)

从上往下写结果:0.01

(0.25)D=(0.01)B

 

以下写个复杂小小的例题:(0.625D

 

 

0.625

X 2                 0     

_______________

1.250               1       (因为乘2后所得的结果整数部分得1,所以取1

 

0.25                         (因为一以被取所以整数位变0

X 2          

_______________                (从上往下写)

0.5                  0

X2            

_______________

1                                            1

 

结果:(0.625D=0.101B

注:整数的转换是精确的,小数的转换可能出现无穷小数或循环小数的情况。此时需要进行舍入处理以截断,所以小数的转换可能略有偏差。箭头表示由高位到低位的趋势。

至于注释所说的只要按照以上的方法用计算十进制(0.1D转二进制是得什么结果就明白了。

同理十进制转八、十六进制是一样。这里略

 

这里以说明了二进制转其它进制的方法以及十进制转换其它进制的方法

所如果想达到进制的转换需要跳级进制的方法的话,可以用以下的方法,

一般二进制转换八进制是:先二进制转十进制再十进制转八进制的方法

但以下是可以一步完成进制的转换方法:

 

例:(0110 0100B转八进制

 

首先将0110 0100写成 001 100 100 这两个数是等效的,只不过是在原来的基础上前加一个0,为什么要三位为一个单元呢,因为二进制转八进制是由三个位来完成一个八进制的单个数。如上例:

 

0110 0100 ------à    001 100 100        三位为一个单元

                                  1 4   4

 

所(0110 0100B=144O

 

同理:(0110 0100B=(64)H

0110 0100                                           四位为一个单元

6      4

 

提醒:只要记清楚常用的互为相加就方便很多了。

二进制    十进制

1              1

10            2

11           3=1+2 也就是(1+10B

100          4

1000        8

10000      16

100000    32

arrow
arrow
    全站熱搜

    戮克 發表在 痞客邦 留言(0) 人氣()