|
|
1
1
这是因为计算机模拟是基于 two's complement 你应该读一下 method of colpement 例如,在补码十进制数中,自然减法看起来是这样的(使用4位数字):
很明显,它是-1,因为在互补系统中,第一个数字(当然,在big-endian中,你应该熟悉 endianness )定义符号。例如,在十进制补码中,4是4,4是3,2是2,1是1,0是0,9是-1,8是-2,7是-3,6是-4,5是-5。 这是因为在补数系统中,您总是对相同数量的数字进行运算,但除了忽略溢出结果外,您总是在进行加法和减法运算。例如,使用两个十进制数字:
正如我所说,结果只有两位数(我们加了两位数),所以结果是99。正如我之前提到的,第一个数字被解释为-1(而不是9)。因为它是位置数字系统,我们可以很容易地将这个结果转换为我们的普通十进制,只需将数字乘以正确的十次方即可:
现在尝试第一个结果:
现在在二进制中,它要简单得多,因为第一个数字只是告诉符号是什么。尝试使用8位数字: 1111 1111 这显然是-1,因为如果我们加1,结果将是0。你可以说我在撒谎,因为你可以简单地添加以下内容:
但在补码系统中是不正确的。这是因为在补码系统中,第一个数字不仅描述了数字的符号,而且所有的数字都可以被这个数字无限扩展!这就是id补码十进制99=999的原因!这也意味着我们可以轻松地将8个字节的数量扩展到例如32个字节! 例如,尝试使用数字17和-1。您现在已经熟悉了-1。在8字节中,二的复数-1是: 1111 1111 扩展到32字节,它为我们提供了: 1111 1111 1111 1111 1111 1111 1111 1111 要将其转换为普通十进制,我们需要进行2^31+2^30+…+2^0,但(正如我所提到的)第一个1是-1,所以它正好是-1*2^31+2^30+..+2^0如果你计算这个,它正好是-2147483648+2147483647=-1! 0001 0001(十进制17) 扩展到32口可提供: 0000 0000 0000 0000 0000 0000 0001 0001 我们可以同意现在仍然是17:) 为了说明我不是什么疯子,只是一个IT学生,我将展示恰恰能做到这一点的C++代码:
|
|
2
1
基本上,这取决于有多少空间。最高有效位用于确定数字是否为负数。 在32位系统中,以下两个数字是等效的:
作为一个有符号的16位值,开头的1表示它是一个负数。要获得其值,请翻转每一位,然后加一位。
作为 无符号的 16位值,所有16位都用于确定幅度。这将导致53794人。 |
|
|
3
0
这里的未发音部分是关于符号的。它存储在前端,表示符号。 http://www.binaryconvert.com/result_signed_short.html?decimal=045049049055052050 更简洁地说,在大多数系统中,16位的“字”或整数通常被称为“短”,表示32768到+32767之间的有符号数字。这是你的老师所指的“二进制”数字,它不是直接作为二进制数字存储的,而是以二进制格式存储的。实际上,只有15个点可以存储该值,并且必须为符号保留一个点。否则,一个无符号值可以使用所有16个点作为数字,因此可以从0到+665535。 |
|
|
4
0
二进制数字有不同的表示方式:
数字系统通常使用2的补码表示。
要获取二进制数的十进制数,请使用2的补码:
|
|
|
5
0
在计算机中,通常通过假设最左边的比特被复制无限次来表示“二的补码”有符号数,从而将比特序列(1101 0010 0010)视为(1111…1111 1101 00100 0010)。尽管一个由1组成的无限字符串看起来像是一个无限大的数字,但在这样的字符串中加1将产生一个由0组成的无限串(即0)。因此,无穷一串1是1的加法逆,因此具有-1的有效值。一个由1和若干个零组成的无限字符串,将是单个1和该数目个零的加性倒数(因此在您的示例中,最左边的“1”的有效值为-32768,而不是+32768)。虽然将幂级数公式应用于1+2+4+8+16+32+64…得出-1的事实通常被认为是一种反常现象,但这与“二补”数学的工作方式是一致的。 注意,虽然许多对二的补码数学的描述只是将最高位的“缩放因子”的符号描述为被反转(例如-32768而不是+32768),从用最左边的比特的副本进行左填充的角度思考,可以更容易地理解为什么有符号的数字表现得好像最左边的数字是重复的(例如,将负16比特整数转换为32比特整数会用1填充最左边的16比特)。 |
|
|
Flegy · PHP/MSSQL字符串到十六进制 8 年前 |
|
|
Soumil Deshpande · 将十六进制字符串转换为可读输出 8 年前 |
|
Jahongir Rahmonov · 计算文件的校验和 8 年前 |
|
|
DenoDev · C-十六进制输出中缺少0 8 年前 |
|
|
Elie Daher · 在C中将十六进制转换为uint8\u t++ 8 年前 |
|
|
e2rabi · 如何使用Java屏蔽十六进制int? 8 年前 |
|
|
user3780807 · c++流负数转换 8 年前 |