赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码.

赶紧进来!!! 本文详细讲解了各进制数(二进制.八进制.十进制.十六进制)以及原码,反码,补码,带你更深一步了解计算机底层的运算逻辑与思路!!!

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第1张图片

带你从0到1了解各进制数和原反补

  • 一 .从0到1了解各种进制数
  • 1.认识各种进制数(二.八.十.十六进制)
    • ① 二进制数的运算规律,表达方式与特点
    • ②八进制数的运算规律,表达方式与特点
    • ③十进制数的运算规律,表达方式与特点
    • ④十六进制数的运算规律,表达方式与特点
  • 2.各进制数之间的转换(二.八.十.十六进制)
    • 二进制数和十进制数之间的转换↓
      • ①二进制数转十进制数
      • ②十进制数转二进制数
    • 二进制数和八进制数之间的转换↓
      • ①二进制数转八进制数
      • ②八进制数转二进制数
    • 二进制数和十六进制数之间的转换↓
      • ①二进制数转十六进制数
      • ②十六进制数转二进制数
  • 二.从0到1了解原码.反码.补码(简称原反补)
    • 1.计算机中如何表达正负数
    • 2.为什么会存在原码.反码.补码
    • 3. 原码.反码.补码的转换↓
      • ①正数原反补的转换
      • ② 负数原反补的转换
  • 三.总结

一 .从0到1了解各种进制数

1.认识各种进制数(二.八.十.十六进制)

在计算机业对数据有不同进制划分,现分有二进制数.八进制数.十进制.十六进制数

① 二进制数的运算规律,表达方式与特点

二进制数的运算规律是逢二进一, 1+1用二进制数表示为10 通常在一串二进制数后面用符号B表示 如 10B

二进制的优点:1传输和处理时不易出错,因而可以保障计算机具有很高的可靠性 2…运算规则简单。 与十进制数相比,二进制数的运算规则要简单得多,这不仅可以使运算器的结构得到简化,而且有利于提高运算速度
二进制的缺点:用二进制表示一个数时,位数太多,太繁琐
2.难于记忆,可读性差。

②八进制数的运算规律,表达方式与特点

八进制的运算规律是逢八进一,7+1如果用八进制表示就是10 通常表示一串八进制数在最后用符号O 或者下缀8如10O 在c语言里一串数字以0开头表示是八进制数 0 10
八进制有时被用于计算而不是十六进制,也许最常在现代与文件权限下Unix系统。 它的优点是不需要任何额外的符号位数

③十进制数的运算规律,表达方式与特点

十进制的运算规律是逢十进一,9+1用十进制表达就是10 通常表示一串十进制数在最后用符号D 如 10D 通常省略不写也为十进制数
看到9+1等于10是不是特别亲切,没错,我们日常生活中用到的就是十进制数,

④十六进制数的运算规律,表达方式与特点

十六进制的运算规律是逢十六进一, 既然是十六进一那十到十五的数字如何表示呢, 十六进制里用ABCDEF分别表示十六进制里的十到十五,所以当F+1即为10表示十六
在c语言中用添加前缀0x以表示十六进制数。通常表达一串十六进制数最后用符号H表示,或者这串数字最后有下缀16如果10H 在c语言里 一串数字的前缀为0x则表示该数字为十六进制 0x 10

2.各进制数之间的转换(二.八.十.十六进制)

二进制数和十进制数之间的转换↓

①二进制数转十进制数

二进制数转十进制数一般采用按位权展开方程式之和
要从右到左用二进制的每个数去乘以2的相应次方,或者把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。

二进制数1000110转成十进制数可以看作这样:

数字中共有三个1 即第一位一个,第二位一个,第六位一个,然后对应十进制数即2的1次方+2的2次方+2的6次方,
即1000110=64+0+0+0+4+2+0=70
在这里插入图片描述

②十进制数转二进制数

十进制数转二进制数一般采用除二倒取余数法.
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。

十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第2张图片>
上图为156十进制转为二进制 最右边为余数,结果为倒取余数10011100B

二进制数和八进制数之间的转换↓

①二进制数转八进制数

二进制数转八进制数一般三个二进制数为一组如果不够则在右边补零,然后按位权展开方程式之和,每三个二进制数得到一个八进制数
记忆方法:二的三次方为八,遇到二进制转八进制就是每组三个二进制进行转换

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第3张图片
上图为将100010这串二进制转换为八,分为100 010 两组二进制数 100按位权展开方程式之和为4 010按位权展开方程式之和为2 结果为42O

②八进制数转二进制数

根据二转八的规律,一串八进制数分为每个一个八进制数用除二倒取余数转换为二进制数然后对应组成二进制数

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第4张图片
上图将40O这个八进制数转换为二进制数 先将4除二倒取余数为100 然后0这个八进制数除二倒取余数为0然后补齐三个0转为二进制为000 ,最后转化为100 000B

二进制数和十六进制数之间的转换↓

①二进制数转十六进制数

二进制数转十六进制数 将一串二进制数分为从右往左四个二进制数为一组,不够的在左边补0, 然后每四个二进制数按位权展开方程式之和 得到一个十六进制数字.再将这些数字组合成十六进制数
记忆方法:二的四次方等于十六,遇到二转十六就是取四个二进制数进行转换

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第5张图片
上图为将100111010B这串二进制转换为十六进制,从右往左取四位,不够补0,最后分为三组 0001 0011 1010 将其分布对应按位权展开方程式之和得到1 3 10 然后对应十六进制为 13A

②十六进制数转二进制数

十六进制数转二进制数同理,每一位十六进制数进行除二倒取余数法,一位十六进制数化为4位二进制数

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第6张图片
上图是十六进制数40转化为二进制数,4除二倒取余数法为100然后左边补一个0,0除二倒取余数法补齐4位二进制数为0000组成十六进制数为01000000最左边的0可以省略最后为1000000

浮点数也有进制的转换小数点后的位数从-1次方开始, 但在C语言中 浮点数的转换有它自己的转换标准,在后面数据存储篇中会详细讲到

二.从0到1了解原码.反码.补码(简称原反补)

1.计算机中如何表达正负数

我们现实生活中有正负数之分,计算机是服务于人类所以也设计了正负数,
但是根据计算机原理设计,在计算机内部存储的是二进制补码,我们看到的是任何进制形式的原码,又分有符号位和无符号位的数字,-1为负数是一个整形整形有32个二进制位它转化为二进制实际是10000000000000000000000000000001 ,最高位1表示负数的意思,其余的是正常二进制位,
+1为正数,转化为二进制数为00000000000000000000000000000001最高位为0表示正数,其余位是正常的二进制位

2.为什么会存在原码.反码.补码

首先我们计算机里cpu中央处理器只会运算加法.并且计算机内部存储的是二进制补码,显示出来我们看到的是原码形式.
补码和反码被设计出来就是为了表示负数的,他们被设计出来只是为了计算机更好的去计算

3. 原码.反码.补码的转换↓

①正数原反补的转换

在计算机中正数的原码.反码.补码是完全相同的
int a =1; int b=2; a+b在计算机中是如何运行的?

首先1是一个十进制数原码,将其转化为二进制数为00000000000000000000000000000001和00000000000000000000000000000010
因为一个整形是32位所以后面要补0
在计算机中存储的是二进制补码,因为正数原反补相同所以它们也是二进制补码,两数相加为00000000000000000000000000000011,而得到的这串数字为二进制补码,因为是正数原反补相同,所以也是二进制原码,将其再转化为十进制数,就得到了十进制数字3

② 负数原反补的转换

负数和正数不一样,负数的原码转反码为原码符号为不变,其他位按位取反得到反码,反码转补码为反码加1.

int a=1;int b=1; 我们现在所用到的整形是有符号的整形, a-b为 1-1 计算机实际进行的操作是1+(-1)
-1 表示负数
1表示+1 正数,根据上面的正负数表示二进制,
-1转化为二进制原码为10000000000000000000000000000001
因为-1是负数,转化为反码为 原码符号位不变即最高位1不变,其他位按位取反(取反表达的意思是0变成1,1变成0)
此时-1反码为11111111111111111111111111111110
反码转补码为补码加1
此时补码为11111111111111111111111111111111

+1转化为二进制原码为00000000000000000000000000000001
因为正数原反补相同,
此时+1二进制补码为00000000000000000000000000000001
在计算机中进行加操作为两数的补码相加11111111111111111111111111111111+00000000000000000000000000000001
得到的数为100000000000000000000000000000000,为33位二进制数,但是整形最多32位会去掉最高位的1,
此时为00000000000000000000000000000000 32个0最高位是0表示的是一个正数,原反补相同,此时得到 -1+1的值为0.

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第7张图片

三.总结

各种进制数和原码.反码.补码的存在都不是多此一举的,这些都是前人智慧的结晶,随着计算机越学越深入就会越来越明白这样设计的奥秘,作为后来人的我们是站在了巨人的肩膀上看世界,为此我们更要好好学习,加油 !!!

作者水平有限,文章中有什么不对的地方还请指正,本人定当虚心接受大佬的讲解,及时作出改正

写文不易,给个一键三连支持下叭~~~

赶紧进来修内功!!!带你认识C语言中各种进制数和原码反码补码._第8张图片

你可能感兴趣的