C语言

您所在的位置:网站首页 补码转十进制要算符号位吗 C语言

C语言

2024-07-11 21:53:20| 来源: 网络整理| 查看: 265

目录

一、什么是进制?

1.1各进制组成及原理的介绍

1.2各进制的用途

二、各进制之间的转换

2.1引子 你是如何理解十进制的

2.2 二、八、十六进制转十进制

2.3 十进制转二、八、十六进制

2.4 二进制与八进制、十六进制之间的相互转换

三、二进制的原码反码与补码

3.1什么是原码反码补码

3.2 为什么除了原码,还有反码补码,他们有什么用?

3.3原码反码补码之间的转换

写到这里,字数已经有些多了,我不想让一篇博客变得又臭又长,于是决定分为上下两篇,在下篇中我们再进行操作符的介绍与应用,期待与您的再次相遇,那么这篇博客就结束了,感谢您的阅读,希望您可以点一个免费的赞。祝您生活愉快,再见。

封面

一、什么是进制? 1.1各进制组成及原理的介绍

在日常生活中,我们通常使用十进制来表示数,十进制由十个数字0,1,2,3,4,5,6,7,8,9组成,它的规则是逢十进一,因为在十进制中没有单独的数字表示十,只能同过1与0的组合10来表示十。同样的,二进制由两个数字0与1组成,他的规则便是逢二进一,因为二进制中没有单独的数字表示二,所以只能通过1与0组合成10来表示二。

八进制的数字组成想必聪明的读者已经猜到了,那么十六进制的数字组成呢?我们如何用一个数字来表示十、十一、十二、十三、十四、十五呢?这是不可能的,所以答案是不用数字,用字母。十六进制由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F这十六个字符组成,他的规则是逢十六进一。从A开始到F依次表示十到十五。

1.2各进制的用途

十进制已经渗透了我们的生活,被大众所接受,各种信息如时间、日期、价格等都是用十进制表示。如果有一天科学家提议说我们改用十六进制吧,那么全世界人民一定不会同意的。那有人就问了,十进制那么好用,为什么还会有其他进制的出现呢?计算机为啥不用十进制呢?

问的很好,是计算机不想用十进制吗?不是,是因为它太傻。从计算机的本质上来说,计算机的处理器只能接收两种信号,一种是高电平信号(5v),另一种是低电平信号(0v),也就是说,计算机只能认识两个符号,他们分别用高电平与低电平表示,那就没办法了,为了照顾计算机这个傻蛋,二进制便出现了,让高电平代表1,让低电平代表0,这样,我们的计算机才能发挥它的计算作用。

那八进制与十六进制呢?别急,我们在后面讲。

二、各进制之间的转换

我们人类对十进制的理解是最直观的,所以当我们看到其他进制的数时,我们的第一个想法就是把它转化成十进制,下面我们依次学习各进制转化为十进制。

2.1引子 你是如何理解十进制的

你还记得自己小时候是怎么理解10比9大的吗?1明明比9小,为什么后面多了个0就比9大呢?小时候是强行理解,但现在你可以骄傲的说,是因为所在的位不一样,1在十位,而9在个位,1表示的是有1个10^1,而9表示的是有9个10^0,那为什么用10^(n-1)表示第n位呢?因为这是逢十进一位的十进制,当然要用10做底数了。

2.2 二、八、十六进制转十进制

根据引子,我们可以得出二进制的第n位数在十进制下是用2^(n-1)来表示的。那现在我给你一个二进制数101011,你会把它转成十进制吗?

计算过程就是把二进制中各个位上的数字依次转化为十进制再相加,例子中的计算过程是:

八进制与十六进制转化成十进制与二进制的方法近乎相同,这里只给出两个例子,读者看一下就明白了。

八进制转十进制:

十六进制转十进制:

2.3 十进制转二、八、十六进制

那如何把十进制转成二、八、十六进制呢?这是一个逆的过程。

在讲解之前我们不妨先想一想怎么得到十进制中的每一位数字,用C语言是这么做的

#include ​#define num 10 int main() { int arr[100]={0}; int a=123; int count=0; while(a>=num) { arr[count]=a%num; a=a/num; count++; } arr[count]=a%num; return 0; }

这样arr数组中就储存了a的每一位数(不过是逆序存储的), 相信大家一定是都会的(代码省略了数组的打印)。

那得到123的二进制形式中的每一位数呢?只需要把num宏定义为2就可以了,如图:

#define num 2 int arr[100]={0}; int a=123; int count=0; while(a>=num) { arr[count]=a%num; a=a/num; count++; } arr[count]=a%num;

是不是非常合理,在纸上演算就是除2,取余数,再除2,再取余数,一直到这个数比2小了,我们再取一次余数,就可以结束了。注意,我们是依次得到由低位到高位的二进制的各位数的,所以先得到的余数是位数小的,后得到的余数才是位数大的。最终写结果的时候千万不要写反哦。

附笔算示例:

如果你理解了十进制转二进制,那么十进制转八、十六进制也就收入囊中了,只需要把二替换为八与十六即可,其余的操作不变,(注意,十进制转十六进制时,余数大于等于十时要用字母表示哦,可别忘了)

2.4 二进制与八进制、十六进制之间的相互转换

不知你是否早已察觉,8是2^3,而1*2^0+1*2^1+1*2^2=2^3-1=7,这意味着二进制的个、十、百这三位数可以表示八进制的个位数的任意一个数字。那二进制的千、万、十万这三位数可以表示八进制中的十位数吗?

当然可以,8的十位数的最大表示为7*8^1,而2^3+2^4+2^5=2^3*(2^0+2^1+2^2)=2^3*(2^3-1)=7*8^1,我们以此推广,每位八进制都对应着二进制中相应的三位,如图所示:

二进制与十六进制的转换,与上述的类似,四个二进制位可以表示一个十六进制位,不再进行证明,我们直接上图:

这就是二进制与八进制、十六进制之间的相互转换,是不是非常的简单,读者你一定能轻松地掌握的。

三、二进制的原码反码与补码 3.1什么是原码反码补码

我们首先来介绍原码,以一个char类型的变量a为例,它有八个二进制位。我们把12赋给a,那么它的二进制原码表示为00001100,我们把-12赋给a,那么它的二进制原码表示为10001100。从左边数的第一位二进制位叫做符号位,它是0则代表是正数,是1则代表是负数,这就是原码,与普通的二进制没什么不同,就是加了一个符号位的概念。

那什么是反码呢?如果是负数,那么反码就是把原码里除了符号位之外的其他位都按位取反,把0变为1,把1变为0,例子中的-12,它的反码就是11110011。所以反码这个名字是不是起的非常好呢?

那什么是补码呢?如果是负数,那么补码就是在反码的基础上再加1,例子中-12的补码就是11110100。

那正数呢?正数的反码补码怎么转化?我很荣幸地告诉你,正数的原码反码补码是一致的,不需要进行计算。 

3.2 为什么除了原码,还有反码补码,他们有什么用?

用原码表示-12我们一目了然,而用反码与补码表示-12我们就会一头雾水,那反码补码有什么用?

解答这个问题很简单,我们的计算机只会进行加法运算,它不认识 ' - '这个运算符,那我们怎么实现a=a-a;即12-12的运算呢?转换为12+(-12)即可,那我们先来用原码来计算一下结果:

00001100 + 10001100 =10011000//显然结果并不是0

再用反码来计算一下结果:

00001100 + 11110011 = 11111111//显然结果也不是0

最后再用补码来计算一下结果:

00001100 + 11110100 = 100000000

注意,这时结果是9位数,我们是以char类型的变量a做例子的,它只能储存8位数,那么结果的最高位1就会被舍弃,最后的结果就是00000000,它表示0,这是我们预期的结果。

所以你应该猜到了吧,计算机储存的数都是以补码的形式储存的,只有这样才能正确的实现数的运算,这就是补码存在的意义。

那反码呢?反码是计算补码的一个过渡,当然它在别的方面也自有用处,这里就不再深入讨论了。

3.3原码反码补码之间的转换

在3.1我们介绍了如何将原码转换为反码和补码,现在我们再说明如何将补码转换为原码。

就像之前所说的,我们碰到一个负数的补码,是很难反应出它表示的是哪个负数的,这时候就需要将补码转换为原码,让我们知晓它是谁。

补码转换成原码的步骤与原码转换成补码的步骤是一致的,先按位取反,再加1,就可以得到原码了,例如,-12的补码是11110100,我们先按位取反,变成10001011(注意符号位不变哦),再加1,就变成了10001100,怎么样,是不是你熟悉的原码呢?很神奇吧。

————————————————————————

写到这里,字数已经有些多了,我不想让一篇博客变得又臭又长,于是决定分为上下两篇,在下篇中我们再进行操作符的介绍与应用,期待与您的再次相遇,那么这篇博客就结束了,感谢您的阅读,希望您可以点一个免费的赞。祝您生活愉快,再见。

如果有任何错误,请您海涵,并欢迎您在评论区指正。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭