4、进制转换

4.1.明确:计算机中数字都是在内存中,并且数字都是以二进制的形式存储
4.2.明确:计算机中对数字的表示形式有四种:
     2进制表示,8进制表示,10进制表示,16进制表示
     不管是哪种形式,都是对同一个内存中存储的数字的不同表示形式而已
                  也就是内存的中的数字不会随着进制的不同而改变! 
    8,10,16进制给程序员看,好看
    2进制给计算机看,计算机只认2进制
4.3.明确:计算机中把内存中每个字节又分8段,每段只能记录0和1
      要想把一个数字存储到内存中,必须将这个数字分拆成若干个0和1
      每段对应的专业术语:位,bit,bit位
      结论:1Byte=8bit
                2Byte=16bit
                4Byte=32bit
                8Byte=64bit
                   例如:char a = 'a'; //需要1个字节,8位就可以存97
                              short b = 2500; //需要2字节,16位就可以2500
                              int c = 2500000000000; //需要4字节,32位就可以存
4.4.二进制
切记切记切记:计算机中所有的数字都是以二进制的形式存储到内存中        
a)定义:用一组0和1表示数字的方法简称二进制表示形式    
             例如:现在有一个10进制数90(前提是char类型),要存储到内存中,必须以二进制来存
             需要将90分拆成8位,其二进制表示形式为:01011101(二进制形式)      
b)特点:
1.二进制数的编号:从0开始
   例如:前提是char类型
   高位      低位
   76543210   二进制数的编号
   01011010   二进制数
   例如:前提是short类型
   高位                         低位
   15 14 13 12 11 10 9  8  7  6 5 4 3 2 1 0  二进制数的编号
    0   1   1   1   0   1  1  0  0  0 0 1 1 0 0 1 二进制数
2.二进制数中每个1单独代表一个10进制数字,这个数字的值是2的编号次方
   例如:前提是char类型
   高位      低位
   76543210   二进制数的编号
   01000000   二进制数A(其中第6位的1对应的数字为2的6次方=64)
3.二进制数中相邻的两个1,左边是右边的2倍
4.二进制数加1的时候把编号为0位置开始的多个连续的1变成0,最左边的0变1
   例如:
   76543210   二进制数的编号
   00001111 + 1 = 00010000  
   01111110 + 1  = 01111111

4.5.二进制和十进制之间的转换
a)明确:计算机中所有的数字都是以二进制的形式存储到内存中
              而这个10进制就是对内存中的二进制数的另一个表达方式而已,不会改变原来的数
b)二进制表示的非负数(0和正数)转换成10进制就是把每个二进制数中的1单独换算然后加
   例如:前提是char类型
   76543210   二进制数的编号
   01101010   二进制数A(非负数)
   A对应的十进制数B=2的6次方+2的5次方+2的3次方+2的1次方=64+32+8+2=106
   结论:将来把106十进制数分拆8位,一位一位的存到1字节的内存中
c)10进制表示的非负数转2进制
   采用"除2取余,逆序排列"法
   具体做法是:用2整除十进制整数,可以得到一个商和余数;
   再用2去除商,又会得到一个商和余数,如此进行,直到商为小于1时为止,
   然后把先得到的余数作为二进制数的低位
   后得到的余数作为二进制数的高位,依次排列起来。 
   例如:91这个十进制数转成对应的二进制
   91/2=45     余1
   45/2=22     余1
   22/2=11     余0
   11/2=5       余1
   5/2=2       余1
   2/2=1       余0
   1/2=0       余1
   结果二进制为:01011011
   
   789/2=394 余1 第0位
   394/2=197 余0 第1位
   197/2=98 余1 第2位
   98/2=49 余0 第3位
   49/2=24 余1 第4位
   24/2=12 余0 第5位
   12/2=6 余0 第6位
   6/2=3 余0 第7位
   3/2=1 余1 第8位
   1/2=0 余1 第9位
   789的二进制数:000001100010101(用2个字节来存储,高5位补0)   

d)负数的十进制和二进制不能直接转换,必须借助相反数(5的相反数-5)
   1.十进制的负数转二进制三步骤:
       首先计算相反数
       然后将相反数转成二进制
       最后取反加1(取反的意思就是1变0,0变1)
       例如:-14(10进制的负数,前提是数据类型为char)
       1.计算-14的相反数14
       2.将14转换成二进制:00001110
       3.取反加1:11110001+1=11110010
       结论:-14将来在内存中对应的二进制数为11110010
  2.明确:有符号类型数字(不加unsigned)才能有符号
               二进制数中最左边的位叫做符号位
               此位可以确定数字的符号(正还是负)
               符号位的值为0表示此数字为非负数(0和正数)
               符号位的值为1表示此数字为负数
               切记:讨论符号位的前提是必须确定数据类型
               例如:10010101(前提是这个二进制数的数据类型为char),此数必然是负数
            00010101(前提是这个二进制数的数据类型为char),此数必然是正数
               1001010110010101(前提是这个二进制数的数据类型为short),此数必然是负数
               0001010110010101(前提是这个二进制数的数据类型为short),此数必然是正数
               0000000010010101(前提是这个二进制数的数据类型为char),此数必然是负数
      例如:换算二进制数10110110的十进制(前提是数据类型为char,显然为负数)
      1.先取反加1:01001001+1=01001010
      2.然后将二进制转十进制:01001010=2的6次方+2的3次方+2的1次方=64+8+2=74
      3.最后取相反数:-74

4.6.二进制(0/1)和八进制(0~7)之间的转换
a)明确:计算机中所有的数字都是以二进制的形式存储到内存中
              而这个8进制就是对内存中的二进制数的另一个表达方式而已,不会改变原来的数
b)八进制定义:就是把二进制数从右边到左边每三位分一组
           每组用一个0到7的数字替换得到八进制表示形式
           注意:八进制数前面加0(零)
           占位符:0%o
   例如:二进制数:0110 1001(十进制为105),转八进制,三步骤:
   1.先分组:001  101 001
   2.换算:
              001=2的0次方=1
              101=2的2次方+2的0次方=5
              001=2的0次方=1
   3.替换:0151
      
重磅好消息:二进制,十进制,八进制之间的转换实际开发记得用计算器!

4.7.二进制(0/1)和十六进制(0~f)之间的转换(核心中的核心)
a)明确:计算机中所有的数字都是以二进制的形式存储到内存中
              而这个16进制就是对内存中的二进制数的另一个表达方式而已,不会改变原来的数
b)十六进制定义:把二进制数从右边到左边每四位分为一组
              每组用一个字符替换(用a到f之间的字母替换10~15之间的数字)
              注意:16进制数前面加0x或者0X,不用区分大小写
              占位符:%#x或者%#X
    例如:11000011(二进制),转成对应的16进制数,分三步:
    1.先分组:1100 0011
    2.换算:
       1100=2的3次方+2的2次方=12
       0011=2的1次方+2的0次方=3
    3.替换
       12->c
       3->3
    4.结果:此二进制对应的十六进制为:0xC3

4.8.切记切记切记:务必拿下二进制和十六进制之间的转换
        二进制在程序中一般用16进制表示,16进制也就是二进制
        严重鄙视用计算器实现2进制和16进制的转换,必须立马脑子换算出来!   
        结论:
            16进制        2进制
               0              0000
               1              0001
               2              0010
               3              0011    
               4              0100
               5              0101(用的多)
               6              0110
               7              0111
               8              1000
               9              1001    
               a              1010(用的多)
               b              1011    
               c              1100
               d              1101
               e              1110
               f               1111
      演练:                  高    低
               0x48        0100 1000
               0xb6        1011 0110
            高                低
               0xfacb6321    1111 1010 1100 1011 0110 0011 0010 0001
               0x5a48cd17    0101 1010 0100 1000 1100 1101 0001 0111

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暗里い着迷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值