此函数:int signextend( int value, int size )接收有符号二进制形式的值(如果最高有效位为0,则表示信号+;如果最高有效位为1,则表示为- ),并接收该二进制值的大小。这样做的目的是将值扩展到有符号的int大小。我该怎么做呢?
我知道我需要2if,如果最高有效位是1或0,我需要用1或0来扩展它,但我不知道如何从值中选择最高有效位
发布于 2017-04-19 18:22:19
像这样的东西应该行得通。顺便说一句,这些数字被称为符号幅度:
int signextend(unsigned int value, unsigned int size)
{
const unsigned int topmask = 1u << (size - 1);
if((value & topmask) != 0)
{
return -(value & ~topmask);
}
return (int) value;
}这使得参数是unsigned的,因为让它们签名对我来说没有任何意义。
如果像这样调用:signextend(0xc, 4);,它将返回-4 (0xc在二进制中是1100 )。
请注意,此格式可以表示-0 (例如,考虑signextend(0x80, 8);),它当然不能表示为int,并将映射为0。
发布于 2017-04-19 18:26:07
此二进制值的
大小
如果您的意思是这是二进制字符串的长度(例如,1010表示的int10的大小= 4),那么只需执行以下操作
int b = 8;
int size = 4;
printf("this is the most significant bit %d", b >> size-1);https://stackoverflow.com/questions/43492779
复制相似问题