计算机基础:编码03,根据十进制数,求其原码

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:计算机基础:编码02,有符号数编码,原码

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:计算机基础:编码02,有符号数编码,原码

回到目录

下一篇:无

本节前言

上一节,我讲解了原码的一点知识。本节,我继续来讲解关于原码的知识。

在上一节,我讲了,根据一个原码,来判断它所表示的十进制整数。本节,我们反过来,给定一个十进制整数,来求解其原码。

一. 根据十进制数求原码

在下面的讲解中,会涉及将十进制数转为对应的二进制数的知识。将十进制整数转为二进制数,需要采用除 2 取余法。如果你不会这个方法,请参考下面的链接所示的文章。

计算机基础:二进制基础04,十进整制数转化为二进制整数

在确保你已经学会了除 2 取余法之后,你可以接着往下学习本节的知识。

在上一节里面,我们讲了原码的结构。一个原码,它分为两个字段。无论这个原码是 8 位的,还是 16 位的,32 位的,还是 64 位的,它都是分为两个字段。最高位是一个字段,它是符号位。而其余位是另一个字段,数值位。

给定一个十进制整数,首先呢,看它是 0,正数,还是负数。如果是 0 的话,它的原码就是全 0 。如果是正整数的话,则符号位为 0,数值位为这个十进制正整数对应的二进制数。如果是负整数的话,则符号位为 1,而数值位是这个十进制负整数的绝对值所对应的二进制数。

举例来说,如果我们给定 49 这个 十进制正整数,那么,由于是正整数,所以,符号位为 0 。而数值位则是十进制整数 49 所对应的二进制数 11 0001 。假定这个数是 8 位整数,则它的原码就是 0011 0001 。如果这个数是 16 位整数,则它的原码是 0000 0000 0011 0001 。注意,填完了符号位与最简数值位之后,剩余位补 0 。

再来举一个例子,假定我们要来表示的整数是 -93 。这是一个负整数,所以,符号位为 1 。然后呢,这个负整数的绝对值为 93,所以,数值位为十进制整数 93 所对应的二进制数 101 1101 。假定这个数是 8 位整数,则它的原码为 1101 1101 。假定这个数是 16 位整数,则它的原码是 1000 0000 0101 1101 。注意,填完了符号位与最简数值位之后,剩余位补 0 。

二. 例题

在这里,我只举一个例子。求解 ±103 的原码。

无论是 +103,还是 -103,它的绝对值都是 103 。我们先求解 103所对应的二进制数,结果为 110 0111 。这个结果,我们将其作为数值位。

如果是 8 位二进制数,则 +103 的原码是 0110 0111,-103 的原码是 1110 0111 。

如果是 16 位二进制数,则 +103 的原码是 0000 0000 0110 0111,-103 的原码是 1000 0000 0110 0111 。

三. 特殊的原码

对于 0 这个数,它的 8 位原码为 0000 0000,它的 16 位原码为 0000 0000 0000 0000 。

但是现在有个问题,1000 0000,它代表着什么数呢?符号位为 1,而数值位为 0,它所代表的数,是 -0 吗?

不是的。

某一个原码,当符号位为 1,而数值位是全 0 时,这个原码所代表的数值,要看符号的位权是什么。

在某一个原码里面,我们设符号位的位权为 a,某一个数,它正好是说,符号位为 1,数值位是全 0,则这个原码所代表的十进制数为

对于 8 位二进制数,符号位的位权为 7,所以,a 等于 7,则 1000 0000 所代表的十进制数为 ,为 -128 。

对于 16 位二进制数,符号位的位权为 15,所以,a 等于 15,则 1000 0000 0000 0000 所代表的十进制数为 ,为 -32768 。

四. 有符号数的范围

在学习 C/C++ 的时候,我们大概都学习过,8 位有符号整数的范围是 -128 ~ 127,而 16 位有符号整数的范围是 -32768 ~ 32767 。

也就是说,signed char 型变量的范围是 -128 ~ 127,而 short 型变量的范围是 -32768 ~ 32767 。

那么,为什么是这个范围呢?

我们先来说 8 位原码。

(一)8 位原码的表示范围

首先呢,当 8 位全 0 时,此原码表示的数是 0 。

然后呢,当 符号位是 0,且数值位并非全 0 时,则此原码代表正整数。此时,这个正整数的数值位的取值范围是 000 0001 ~ 111 1111,也就是 1 ~ 127 。

当符号位为 1 时,且数值位并非全 0 时,则此原码代表负整数。此时,这个负整数的数值位的取值范围是 000 0001 ~ 111 1111,也就是说,这个负整数的绝对值为 1 ~ 127 。所以,在这种情况里,此原码的取值范围是 -127 ~ -1 。

当符号位 为 1,且数值位是全 0 时,此时,这个负整数所表示的数为 -128 。

我们将以上几种情况清点以下,-128,-127 ~ -1,0,1 ~ 127,把它们组合起来,就是 -128 ~ 127 。

(二)16 位原码的表示范围

首先呢,当 16 位全 0 时,此原码表示的数是 0 。

然后呢,当 符号位是 0,且数值位并非全 0 时,则此原码代表正整数。此时,这个正整数的数值位的取值范围是 000 0000 0000 0001 ~ 111 1111 1111 1111,也就是 1 ~ 32767 。

当符号位为 1 时,且数值位并非全 0 时,则此原码代表负整数。此时,这个负整数的数值位的取值范围是 000 0000 0000 0001 ~ 111 1111 1111 1111,也就是说,这个负整数的绝对值为 1 ~ 32767 。所以,在这种情况里,此原码的取值范围是 -32767 ~ -1 。

当符号位 为 1,且数值位是全 0 时,此时,这个负整数所表示的数为 -32768 。

我们将以上几种情况清点以下,-32768,-32767 ~ -1,0,1 ~ 32767,把它们组合起来,就是 -32768 ~ 32767 。

结束语

本节内容,我觉得应该还可以。希望大家能够学好本节知识。

专栏导航

本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。

(一)WIn32 专栏导航

上一篇:计算机基础:编码02,有符号数编码,原码

回到目录

下一篇:无

(二)MFC 专栏导航

上一篇:计算机基础:编码02,有符号数编码,原码

回到目录

下一篇:无

相关推荐
咖喱年糕2 分钟前
【Windows】系统安全移除移动存储设备指南:告别「设备被占用」弹窗
windows·安全·系统安全
良人眷1 小时前
win10win11启用组策略编辑器
windows·编辑器
SeasonedDriverDG1 小时前
C语言编写的线程池
linux·c语言·开发语言·算法
LAOLONG-C1 小时前
C语言 栈 的 描述 和 详解
c语言·数据结构·算法
Ring__Rain1 小时前
visual studio 常用的快捷键(已经熟悉的就不记录了)
c++·git·visual studio
辛姜_千尘红回1 小时前
AT_abc398_e [ABC398E] Tree Game 题解
c语言·c++·笔记·算法
啊阿狸不会拉杆2 小时前
数据结构-限定性线性表 - 栈与队列
java·c语言·数据结构·c++·python·算法
ChiaWei Lee2 小时前
【C++初学】C++核心编程(一):内存管理和引用
c++
开开心心就好2 小时前
功能丰富的PDF处理免费软件推荐
java·windows·python·pdf·电脑·生活·软件需求
刃神太酷啦2 小时前
基础算法篇(5)(蓝桥杯常考点)—动态规划(C/C++)
数据结构·c++·算法·leetcode·蓝桥杯·动态规划·蓝桥杯c++组