符号扩展1位2的补码数?

问题描述 投票:1回答:2

我是一名学生,我正在用C编写一个函数来签署扩展给定的位字段。我正在使用32位。

我在谷歌上看了这个答案,但没找到我想要的东西。

我正在编写函数,返回从32 in中拉出的一个或多个连续位的二进制补码表示。最左边的位是符号位。

如果我拉一下,我该怎么回事?你如何将单个位表示为带符号的二进制补码?

c binary twos-complement
2个回答
0
投票

说一个1位的二进制补码没有多大意义。如果只有1位,则为0或1。

一般来说,如果你有一个带N位的二进制补码数,最​​高值可以表示为2^(N-1)-1,最低值为-2^(N-1)。如果我们想要愚蠢,我们可以将它应用于N = 1,我们发现1位二进制补码数的范围可以从-1到0。

编辑:您写道:

我正在编写函数,返回从32 in中拉出的一个或多个连续位的二进制补码表示。最左边的位是符号位。

我不认为这是明确定义的。二进制补码是一种编码,可以将数学整数表示为一系列位。给定一个整数,它会告诉您要存储的位数。我不知道一系列比特的两个补码表示是什么。就像你要我给你一系列任意字节的ASCII编码,或者你要我把葛底斯堡地址从法语翻译成英语。


0
投票

据我了解,你想从32位变量中的位流中提取N个任意位(N> = 1&<= 32)并将它们表示为2的补码数(可能将该数字作为有符号整数返回32) )。

这就是说你取出选定的位,将它们放在工作变量的低位(即右边),然后通过向左传播(复制)它来“扩展”最左边的选定位。工作变量中的(先前未定义的)位。这可以作为单个一致的算法来完成,不需要特殊情况下任何特定的N值。

对于两位,它将产生可能的值1,0,-1和-2(分别用于位模式01,00,11和10)。对于一位,它将产生可能的值0和-1(分别对于位模式0和1)。

© www.soinside.com 2019 - 2024. All rights reserved.