c - 找出负二进制数和正二进制数之间的差异
问题描述
我知道我们可以用几种方式表示二进制数,但我真的不确定如何区分正二进制数和负二进制数。
如果我们有 number +13
,那么它的二进制表示如下所示:
1101
它的负面表示如下所示:
11101
我的理解是,如果您需要区分它们,那么存在的0
数量很重要+13
:
01101
即便如此,我仍然无法区分:
11101 ///Here is the representation of -13
和:
11101 ///Here is the representation of +29
我知道这里使用了另一种称为“二进制补码”的方案,我需要应用它。
如何区分这两种二进制表示?
解决方案
正如其他人所说的那样,我可以将这两种二进制表示区分为没有意义的问题。位序列是中性的,当您将其转换为数字时,您将针对给定的表示进行转换。它可以表示一个int、一个unsigned int、一个浮点数或任何你想要的。就像如果我问你什么是硬币,这个词在英语和法语中存在(至少?)具有完全不同的含义(法语单词coin在英语中的意思是角),要回答我,你需要选择一种语言,没有你就无法回答。
关于“二进制补码”,它是与我们 CPU 中使用的标准表示兼容的方式来更改signed int的符号。第一个补码是将所有 0 替换为 1,将所有 1 替换为 0,第二个补码是将前一个结果加 1。
假设字有 5 位,则int值 13 是二进制的 01101。如果我们想要 -13,13 的第一个补码得到 10010,加 1 得到 10011。
但仍然有 5 位字,无符号整数的 10011对应于值 19。
对于5 位的int,根据定义,如果我们尝试更改其符号,则较低的负数是 10000:第一个补码 = 01111,加上 1 = 10000!实际上有一个溢出,5位是不够的。
推荐阅读
- package - How to overcome issue regarding loading Notation package into Wolfram?
- angular - Angular Firebase Cloud Messaging got service worker problems
- oracle - Oracle 授予调试权限而不进行更改
- flutter - Sliver 应用栏无法正确显示 - Flutter
- java - 使用查询 DSL 时可以在表旁边定义数据库名称吗?
- flutter - #Flutter_Camera Can't handle focus in camera package flutter
- r - plotKML - 图层名称、标签大小和图层层次结构
- android - FLAG_INSISTENT 通知仍然振动
- keycloak - 将自定义字段添加到 keycloak 用户创建
- sapui5 - 为 VizFrames DimensionDefinition 和 MeasureDefinition 使用 i18n 文本