我是靠谱客的博主 心灵美小熊猫,最近开发中收集的这篇文章主要介绍c++进制转换_C语言之进制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

计算机使用二进制来存储和运算数据

二进制数位上的数字只能是0和1

一个字节包含8位二进制位

二进制和十进制一样,只是一种数字的表示形式

1.二进制和十进制的转换

整数:

(1)二进制转换成十进制

二进制数字的每个数位有一个编号,最右边的编号是0,向左一次递增

二进制转换成十进制的结果就是将每个数位上的1乘以2的编号次方,再将所有的结果相加

1234 = 1X10^3 + 2X10^2 + 3X10^1 + 4X10^0 1010111 = 1X2^6 + 1X2^4 + 1x2^2 + 1x2^1 + 1x2^0   = 64 + 16 + 4 + 2 + 1 = 87 01110101   = 2^6 + 2^5 +2^4 + 2^2 + 2^0 = 64 + 32 + 16 + 4 + 1  = 117

注:二进制数字中相邻的1之间有倍数关系,左边的1是右边的1的两倍

(2)十进制转二进制

方法1:

将十进制的数字拆分成多个非重复的2的整数次方之和,再将每个拆分的结果单独转换成二进制,最后将所有的结果合并

79 = 64 + 8 + 4 + 2 + 1   = 2^6 + 2^3 + 2^2 + 2^1 + 2^0   = 1000000 + 1000 + 100 + 10 + 1   = 1001111

方法2:

将十进制的数字不停地除以2,保留余数,直到商为0,然后把所有的余数倒着写,得到的结果就是对应的二进制转换结果

          余数 103     1 51       1 25       1 12       0 6         0 3         1 1         1 0 ------------停止结果为 1100111 175     187       1 43       1 21       1 10       05         1 2         0 1         1 0 结果为 10101111

补充:

使用上述方法得到的是二进制的原码

计算机中存储整数实际上存储的是二进制的补码

非负数的补码就是原码,负数的补码是他相反正数的原码取反加1得到

-103 0110 0111 取反------> 1001 1000   加1------> 1001 1001

小数:

(1)二进制转换成十进制

整数部分直接使用上面整数的转换方法,小数部分的每个数位也有一个编号,最左边的小数数位的编号是-1,向右依次递减

小数二进制转换成十进制的结果就是将每个数位上的1乘以2的编号次方,再将所有的结果相加

1011011.1011 = 2^6 + 2^4 + 2^3 + 2^1 + 2^0 + 2^-1 + 2^-3 + 2^-4   = 64 + 16 + 8 + 2 + 1 + 0.5 + 0.125 + 0.0625   = 91.6875

(2)十进制转二进制

整数部分直接使用上面整数的转换方法,将小数部分不停乘以2,每次保留个位并且清0,直到没有小数部分为止,记录的个位依次就是二进制的小数部分

137.3725 整数部分:10001001 小数部分:0.0101111.... 0.3725      0 0.745        1 0.49          0 0.98          10.96          1 0.92          1 0.84          1   ......   0

2.浮点数的存储

浮点数在计算机中的存储类似于科学计数法

1486.31 --------- 1.48631 X 10^3

首先将小数转换成二进制,把二进制的小数用类似于科学计数法的方法表示处理

137.375 ------> 10001001.011 ------> 1.0001001011 X 2^7

在计算机中,记录以上浮点数分别记录 符号,阶码,尾数

5af88fc183da410c0a3dc9484aca9c7a.png

浮点数在计算机中的存储

假设符号位叫S,阶码叫E,尾数叫M,那么对应的浮点数的值V

V = (-1)^S X M X 2^E

浮点数存储的特别规定:

(1)对于尾数M来说,个位永远是1,不需要记录他,尾数M只记录小数点之后的部分

1.0001001011 ------> 0001001011

(2)对于阶码E来说,由于指数可正可负,需要对阶码进行修正

阶码不全为0或者不全为1,阶码E减去一个数得到真实指数,float类型减去127,double需要减去1023,比如一个float数的阶码为129,对应的指数是129-127 = 2

(3)阶码E全为0,这个时候尾数M不再需要加上前面的1,这种方法用来表示+/-0,或者接近于0的很小的数字

(4)阶码E全为1,如果尾数M全为0,此时表示+/-无穷大,如果尾数M不全为0,此时表示该浮点数非法(NaN)

3.八进制

八进制数位上的数字为0~7,八进制是二进制的简写形式

把二进制表示形式从右到左每三个数位分为一组,每一组用一个0-7之间的数字代替,这样的得到的结果就是数字的八进制表示形式

在C代码中可以直接使用八进制,但是必须在数字前加0

10 101 111   = 0257

printf打印数字的八进制形式使用占位符%o

4.十六进制

十六进制是二进制的简写形式,每个数位上的值是0~15,其中0-9直接用数字,10~15使用字母a~f

把二进制表示形式从右到左每四个数位分为一组,每一组用一个0-9或a-f之间的内容代替,这样的得到的结果就是数字的十六进制表示形式

在C代码中可以直接使用十六进制,但是必须在数字前加0x

1010 1111   = 0xaf

printf打印数字的十六进制形式使用占位符%x(小写) %X(大写)

配套视频:深度解析C语言

最后

以上就是心灵美小熊猫为你收集整理的c++进制转换_C语言之进制的全部内容,希望文章能够帮你解决c++进制转换_C语言之进制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部