进制转换小记

首先,进制就是计数规则。名副其实,进制分为2进制,8进制,10进制,16进制。
我们平时生活中,最常用的是10进制,而在计算机里,数据全是2进制表现形式。


首先来说下10进制,有10个基数,0-9; 计数规则是满十进一。0...5...9,10,过了9、则变成10、十位进1了、个位回到0、这就是所谓的逢十进一 



那么2进制,有2个基数,0、1;进位方法是逢二进一,而借位方法是借一当二.
0,1,10,11,100,101,110,111,1000;也就是过了1就是10、过了11就是100、该以往2的时候就往前进1位了、因为没有2这个基数、往前进1位时


个位恢复为0。。。可以自己尝试着往下数。数着数着就明白了。。


各进制的四则运算:


二进制的四则运算很简单.它与十进制数运算的差别在于:进位方法是逢二进一,而借位方法是借一当二.


十六进制的计数规则: 逢十六进一,借一当十六


2F+3A,写成竖式,先算F+A,F是十进制中的15,A是十,加起来是二十五,在十六进制中,满十六进10,二十五在十六进制中就是19,所以


个位是9,进1,2+3+1=6,最后等于69


16进制加法运算举例:


   4 e 2 0 h                  8 2 2 6 H
+ 1 4 0 6 h   记1         8 2 2 6 H   
------------                 ------------
   6 2 2 6 h               1 0 4 4 C H


详解:
0+6=6; 2+0=0; e+4=?e对应10进制是14,14+4=18,18转成16进制是12,所以写2记1;然后4+1=5,进1,5+1=6;最后的结果就是6226
6+6=12,12对应16进制是c,2+2=4;2+2=4;8+8=16,16对应的16进制就是10,所以,最后的结果就是1044C。最后的H代表这个数是16进制


。再比如二进制数,10100B,最后的B,代表这个数是二进制。






进制转换:


1、二进制数、八进制数、十六进制数转十进制数 
有一个公式:二进制数、八进制数、十六进制数的各位数字分别乖以各自的基数的(N-1)次方,其和相加之和便是相应的十进制数。个位,N=1;


十位,N=2...举例: 
110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D 
110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D 
110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D 


1001
↓↓↓↓
1*2^3=8
0*2^2=0
0*2^1=0
1*2^0=1


2、十进制转各进制 
整数十进制转任一进制都是除模取余,至到商为0,再将所有的余数反过来排列, 比如转16进制就是除以16取余数,再将所有的余数反过来排列


就是16进制数
小数十进制转任一进制都是乘模取整数部份,至到小数部分为0,再将整数部分正序排列 
例如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
  1/2 = 0 余1
  故二进制为100101110


3、二进制转换成十六进制
4位2进制数 刚好是从 0000  (零)到 1111 (十五),所以 二进制与十六进制数的互换及其简单: 二到十六 四位一并(不够补0);  十六到二 


一位拆四。


 1 1 0 1 :1 0 1 0 :1 0 1 0 :1 0 0 1
      D             A             A             9
------------------------------------------------
       1    :    A    :   1    :    C
       (0001)           (1010)           (0001)           (1100)




0 1 2 3 4 5 6 7 8 9 a(10) b(11) c(12) d(13) e(14) f(15) 逢十六进一




数着玩吧:


2 16 10
------------------------
0 0 0
1 1 1
10 2 2
11 3 3
100 4 4
101 5 5
110 6 6
111 7 7
1000 8 8
1001 9 9
1010 a 10
1011 b 11
1100 c 12
1101 d 13
1110 e 14
1111 f 15
10000 10 16
10001 11 17
10010 12 18
10011 13 19
10100 14 20
10101 15 21
10110 16 22
10111 17 23
11000 18 24
11001 19 25
11010 1a 26
11011 1b 27
11100 1c 28
11101 1d 29
11110 1e 30
11111 1f 31
100000 20 32
               21  33
               22  34
               23  35
               24  36
               25  37
               26  38
               27  39
               28  40               
               29  41
               2a  42




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Protobuf是一种高效的序列化协议,可以用于数据交换和数据存储。它的主要优势是大小小,速度快,可扩展性强。下面是使用Protobuf的一些小记: 1. 定义消息格式 首先,需要定义消息格式,以便Protobuf可以将数据序列化和反序列化。消息格式定义在.proto文件中,使用protobuf语言编写。例如,下面是一个简单的消息格式定义: ``` syntax = "proto3"; message Person { string name = 1; int32 age = 2; } ``` 这个消息格式定义了一个名为Person的消息,包含两个字段:name和age。 2. 生成代码 一旦消息格式定义好,就可以使用Protobuf编译器生成代码。编译器将根据消息格式定义生成相应的代码,包括消息类、序列化和反序列化方法等。可以使用以下命令生成代码: ``` protoc --java_out=. message.proto ``` 这将生成一个名为message.pb.java的Java类,该类包含Person消息的定义以及相关方法。 3. 序列化和反序列化 一旦生成了代码,就可以使用Protobuf序列化和反序列化数据。例如,下面是一个示例代码,将一个Person对象序列化为字节数组,并将其反序列化为另一个Person对象: ``` Person person = Person.newBuilder() .setName("Alice") .setAge(25) .build(); byte[] bytes = person.toByteArray(); Person deserializedPerson = Person.parseFrom(bytes); ``` 这个示例代码创建了一个Person对象,将其序列化为字节数组,然后将其反序列化为另一个Person对象。在这个过程中,Protobuf使用生成的代码执行序列化和反序列化操作。 以上是使用Protobuf的一些基本步骤和注意事项,希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值