数制编码详解:二进制八进制十六进制的转换,原码、补码、反码、移码的定义

参考资料:《深入理解计算机网络(王达)》


一,数制

1.1 基本数制

  “数制”是“数据进制”的简称,也就是表示数据逢几进位的意思,如我们常用的十进制就是逢十进位,常见的还有二进制、八进制、十六进制。

  • 二进制(Binary),二进制是计算机运算时所采用的的数制类型,基数是2,二进制数的标志为B,如(1001010)B,也可以用下标2来表示;
  • 八进制(Octal),八进制的标志为O或Q,如(4603)O、(4603)Q,也可以用下标8来表示;
  • 十进制(Decimal),十进制数的标志为D,如(1250)D,也可以用下标10来表示;
  • 十六进制(Hexadecilmal),十六进制的标志为H,如(45A)H,也可以用下标16来表示,十六进制也常用前缀0x来表示。

为什么进制采用2、8、16这种,而不是9或12进制呢?

答:2、8、16分别是2的一次、三次、四次方,这就使得这三种进制之间可以很方便的直接进行互相转换。八进制或十六进制缩短了二进制,但保持着二进制的表达特点。

在这里插入图片描述

1.2 不同数制之间的相互转换

  1. 非十进制数转换为十进制数

  按权相加法:非十进制数转换为十进制数就是把这些非十进制数按位以对应的权值(注意要区分整数位与小数位)展开,然后相加得出相应的十进制值。
在这里插入图片描述

  1. 十进制数转换为非十进制数

  十进制数的整数部分采用“除基逆序取余法”(基数相除,然后逆序取余数),小数部分采用“乘基正序取整法”(基数相乘,然后正序取整数)。这里指的基数就是对应的数制,如二进制的基数为2,八进制基数为8,十六进制基数为16。

  1. 非进制数之间的相互转换

  之前说过,二进制、八进制、十六进制分别是2的一次方、三次方、四次方,因此一位八进制数对应三位二进制数,而一位十六进制数则对应四位二进制数,他们之间的相互转换十分容易。

在这里插入图片描述

  1. 进制转换Java代码:
/**
 * 类描述:进制转换器, 编写一个进制转换器, 可以让数字在 二进制, 八进制, 十进制, 十六进制自由转换
 **/
public class RadixConversion {
   

    public static void main(String[] args) {
   
        RadixConversion radix = new RadixConversion();
        // 11101001000.10111B, 1076O, 6374.65Q, 0X7A8C
        radix.conversionDecimal("11101001000.10111B");
        // 825D -> B, 10815.6D -> B, 658D -> O, 9240.65D -> O, 2508D -> H, 5420.82D -> H
        radix.conversionDRadix("825D", Radix.BINARY);
    }

    /**
     * 1.2.1同步练习: 进制转换, 非十进制数转换为十进制数, 将指定参数转换为十进制(Decimal)标志位为D
     * @param str 待转换的参数, 可以是二进制(Binary)标志位为B, 八进制(Octal)标志位为O或Q, 十六进制(Hexadecilmal)标志位为0X或H
     * @return
     */
    public double conversionDecimal(String str) {
   
        // 1. 首先判断str是什么进制的
        String radix = "10";
        double result = 0.0;
        Map<String, String> map = new HashMap<>();
        Map<Character, Integer> hexadecilmalMapping = new HashMap<>();
        map.put("B", "2");
        map.put("O", "8");
        map.put("Q", "8");
        map.put("D", "10"
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值