c语言二进制八进制和十六进制的总结

来源:互联网 发布:安卓必备软件 知乎 编辑:程序博客网 时间:2024/06/07 18:08

综述:

    编程中,我们常用的还是10进制……必竟C/C++是高级语言。比如:int a = 100,b = 99;

不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。但,二进制数太长了。比如int 类型占用4个字节,32位。比如100,用int类型的二进制数表达将是:0000 0000 0000 0000 0110 0100面对这么长的数进行思考或操作,没有人会喜欢。因此,C,C++ 没有提供在代码直接写二进制数的方法。

  16进制或8进制可以解决这个问题。因为,进制越大,数的表达长度也就越短。不过,为什么偏偏是168进制,而不其它的,诸如920进制呢?2816,分别是21次方,3次方,4次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现这一点。

 

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

   二进制数转换为十进制数:0110 0100转换  1 * 2e2+ 1 * 2e3+  1 * 2e5+ 1 * 2e6= 100

  八进制数转换为十进制数八进制就是逢81。八进制数采用 07这八数来表达一个数。1507换算成十进制:7 * 8e0 + 0 * 8e1 + 5 * 8e2 + 1 * 8e3 = 839

  16进制就是逢161,但我们只有0~9这十个数字,所以我们用ABCDEF这五个字母来分别表示101112131415。字母不区分大小写。2AF5换算成10进制: 5 * 16e0  + F * 16e1 + A * 16e2 + 2 * 16e3 = 10997

 

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

  10进制数转换为2进制数比如:6,如果将它转换成二进制数是110

 

  10进制数转换为8进制:转换的方法,和转换为2进制的方法类似,惟一变化:除数由2变成8120转换为8进制,结果为:170

 10进制数转换成16进制和转换为2进制的方法类似,惟一变化:除数由2变成16。同样是120,转换成16进制则为:78

 

 

八进制数的表达方法在转义符中的使用

   C,C++规定,一个数如果要指明它采用八进制,必须在它前面加上一个0,如:123是十进制,但0123则表示采用八进制。如:int a = 100;我们也可以这样写:int a = 0144; //0144是八进制的100千万记住,用八进制表达时,你不能少了最前的那个0。否则计算机会通通当成10进制。不过,有一个地方使用八进制数时,却不能使用加0,那就是我们前面学的用于表达字符的转义符表达法。

  转义符'\'后面接一个八进制数,用于表示ASCII码等于该值的字符。比如,字符(?)ASCII值是63,那么我们可以把它转换为八进值:77,然后用 '\77'来表示'?'。由于是八进制,所以本应写成 '\077',但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。

 

十六进制数的表达方法在转义符中的使用

   CC++规定,16进制数必须以 0x开头。比如 0x1表示一个16进制数。而1则表示一个十进制。另外如:0xff,0xFF,0X102A,等等。其中的x也也不区分大小写。(注意:0x中的0是数字0,而不是字母O),如:int a = 0x100F;int b = 0x70 + a; 注意:C/C++中,10进制数有正负之分,比如12表示正12,而-12表示负12,;8进制和16进制只能用达无符号的正整数,如果你在代码中里:-078,或者写:-0xF2,C,C++并不把它当成一个负数。

  转义符也可以接一个16进制数来表示一个字符。如 '?' 字符,可以有以下表达方式:'?'     //直接输入字符    '\77'   //用八进制,此时可以省略开头的0     '\0x3F' //用十六进制

 

 

二、十六进制数互相转换

  二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个CC++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。

2进制数  快速计算方法   十进制值     十六进值

1111        = 8 + 4 + 2 + 1  = 15              F

1110        = 8 + 4 + 2 + 0  = 14              E

1101        = 8 + 4 + 0 + 1  = 13              D          

1100        = 8 + 4 + 0 + 0  = 12              C          

1011        = 8 + 4 + 0 + 1  = 11              B          

1010        = 8 + 0 + 2 + 0  = 10              A

1001        = 8 + 0 + 0 + 1  = 10              9

二进制数要转换为十六进制,就是以4位一段,分别转换为十六进制。

1111 1101 , 1010 0101 , 1001 1011

 F     D      A      5      9    B  

反过来,当我们看到 FD时,迅速将它转换为二进制数:FD转换为二进制数,为: 1111 1011

  由于十六进制转换成二进制相当直接,所以,我们需要将一个十进制数转换成2进制数时,也可以先转换成16进制,然后再转换成2进制。比如,十进制数 1234转换成二制数,如果要一直除以2,直接得到2进制数,需要计算较多次数。所以我们可以先除以16,得到16进制数: 0x4D2然后我们可直接写出0x4D2的二进制形式: 0100 1011 0010

 

   同样,如果一个二进制数很长,我们需要将它转换成10进制数时,除了前面学过的方法是,我们还可以先将这个二进制转换成16进制,然后再转换为10进制。下面举例一个int类型的二进制数:01101101 11100101 10101111 00011011我们按四位一组转换为16进制: 6D E5 AF 1B  

0 0