进制及其相关

来源:互联网 发布:网络机顶盒遥控器配对 编辑:程序博客网 时间:2024/05/10 09:53

进制及其相关


一。

   2进制,用两个阿拉伯数字:0、1;

   8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;

   10进制,用十个阿拉伯数字:0到9;

   16进制,用0~9和A,B,C,D,E,F

 

举例:(使用10进制表示下列进制的数)

   16进制的32 : 2×16^0+3×16^1=50

   8进制的1507:7 × 8^0 + 0 × 8^1 + 5 * 8^2 + 1 × 8^3 = 839

   2进制数的0110 0100: 0 ×2^0 + 0  × 2^1 + 1 × 2^2 + 1  ×2^3 + 0  × 2^4 + 1  × 2^5 + 1  × 2^6 + 0 × 2^7 = 100

 

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

   我们习惯使用10进制来思维,但是计算机确是使用2进制来表示,偶尔使用二进制可以有利于我们更好的解决问题,但是二进制数目是如此的长而难于思考和操作,比如一个int 类型占用4个字节,32位。一个10进制的100,用int类型的二进制数表达将是:

  0000 0000 0000 0000 0110 0100

   于是我们采用了一个折中的办法,使用8进制或者16进制,它们除了便于和2进制数进行转换,大大缩短表示长度之外,还很好的保留了2进制数的运算特点,便于做& | > 等2进制的运算。

 

三 一些规定

  事实上,对某些数来说,我们既可以理解为10进制,也可以理解为8进制或者16进制,所以对8进制,我们需要以0开头,对16进制数,我们已0x开头。举例:

 int a = 100 ; (10进制)

 int a = 0000 0000 0000 0000 0110 0100 ; (2进制)

 int a = 0144; (8进制 144 =4×8^0+4×8^1+1×8^2)

 int a =0x64 ; (16进制)

 

四 负数

   10进制数有正负之分,比如12表示正12,而-12表示负12;但8进制和16进制只能表达无符号的正整数,那么我们的计算机是怎么表示负数的呢?这就是原码、反码、补码的概念了。举例来说:

    假设有一个int 类型的数,值为5,那么,计算机中表示为:  

                         00000000 00000000 00000000 00000101

    5转换成二进制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

  那么,-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。




原创粉丝点击