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

时间:2012-09-03 01:00:26

标签: c binary twos-complement

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

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

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

如果我拉一下,我该怎么回事?你如何将一个比特代表一个有符号的二元竞争数?

2 个答案:

答案 0 :(得分:0)

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

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

编辑:您写道:

  

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

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

答案 1 :(得分:0)

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

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

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