zoukankan      html  css  js  c++  java
  • 补补算术基础:编程中的进制问题

    关于二进制、八进制、十六进制以及它们与十进制的关系和转换。详细地请参考下面的文章(写得还不错)

    http://www.d2school.com/bcyl/bhcpp/newls/ls06.htm

    在我们编程过程中,用得最多的是十进制,然后是十六进制,他们的转换在c#中主要用两个方法

    Convet.ToString() 和 Convert.ToInt32()

     

    我总结几点:(以下黑体,斜体字是我的总结摘要)

    6.1 为什么需要八进制和十六进制?

    关于这一点,首先因为进制越大,表示一个数字就越短。计算机只认识二进制,但二进制我们不好理解,它太长,而且很不直观。八进制和十六进制因为都是2的整数幂(八进制是2^3,而十六进制是2^4),所以他们本身很好转换为二进制。

    但是为什么我们通常用的又不是八进制和十六进制,而是十进制呢?这又是一个问题。

    6.2 二、八、十六进制数转换到十进制数

    总结来说,这些进制转换为十进制的算法类似如下

    八进制1507换算成十进制。

    第0位 7 * 80 = 7

    第1位 0 * 81 = 0

    第2位 5 * 82 = 320

    第3位 1 * 83 = 512   +

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

                  839(十进制)

    就是说把这个数的不同位的值乘上一个与当前进制有关的权数。第0位就乘以进制的0次方,第1位就乘以进制的1次方,以此类推。

    6.3 十进制数转换到二、八、十六进制数

    反过来,要把十进制转换为其他的进制,算法大致如下

    将商继续除以对应的进制(例如2,8,16),直到商为0。最后将所有余数倒序排列,得到数就是转换结果。

    例如要把十进制中的6转换为2进制,按照下面的方式运算,然后将余数倒过来,就是110.

    被除数 计算过程 余数
    6 6/2 3 0
    3 3/2 1 1
    1 1/2 0 1

     

    还有一个关键问题,如何在编码中表示一个八进制或十六进制呢?例如给你一个数字:123。你怎么知道是八进制,还是十六进制,还是十进制呢?

    为了以示区分,八进制要加上一个0(零)的前缀,例如123应该书写为0123;而十六进制要加上一个0x的前缀,例如123应该书写为0x123

    关于转义字符的问题,一般忽略不考虑

    6.4 二、十六进制数互相转换

    6.5 原码、反码、补码

    原码:一个整数,按照绝对值大小转换成的二进制数,称为原码

    比如 00000000 00000000 00000000 00000101 是 5的 原码。

    反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。

    取反操作指:原为1,得0;原为0,得1。(1变0; 0变1)

    比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。

    称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

    反码是相互的,所以也可称:

    11111111 11111111 11111111 11111010 和 00000000 00000000 00000000 00000101 互为反码。

    补码:反码加1称为补码。

    也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。

    比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。

    那么,补码为:

    11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

    所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

    从本质上说,只有十进制有正负之分,其他进制都没有。那么如果要表示负数怎么办呢?就是先用二进制取得原码,然后取反码,然后取补码。然后再根据情况转换为其他进制。

    那么还有一个问题,就是如何表示小数?

     

    6.6 通过调试查看变量的值

    6.7 本章小结

  • 相关阅读:
    [转]用mamcache 存储session的好处
    [转]怎么写 JQuery插件 (案例原理)
    关于查询优化
    HBase Canary
    HBase Bulk Loading
    有用的技术网站
    HBase 运维分析
    HBase rest
    hbase mlockall
    Jamon
  • 原文地址:https://www.cnblogs.com/chenxizhang/p/1292968.html
Copyright © 2011-2022 走看看