首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将字符大小的二进制有符号数扩展为有符号整数大小

如何将字符大小的二进制有符号数扩展为有符号整数大小
EN

Stack Overflow用户
提问于 2017-04-19 18:16:00
回答 2查看 210关注 0票数 0

此函数:int signextend( int value, int size )接收有符号二进制形式的值(如果最高有效位为0,则表示信号+;如果最高有效位为1,则表示为- ),并接收该二进制值的大小。这样做的目的是将值扩展到有符号的int大小。我该怎么做呢?

我知道我需要2if,如果最高有效位是1或0,我需要用1或0来扩展它,但我不知道如何从值中选择最高有效位

EN

回答 2

Stack Overflow用户

发布于 2017-04-19 18:22:19

像这样的东西应该行得通。顺便说一句,这些数字被称为符号幅度:

代码语言:javascript
运行
复制
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。

票数 0
EN

Stack Overflow用户

发布于 2017-04-19 18:26:07

此二进制值的

大小

如果您的意思是这是二进制字符串的长度(例如,1010表示的int10的大小= 4),那么只需执行以下操作

代码语言:javascript
运行
复制
int b = 8;
int size = 4;
printf("this is the most significant bit %d", b >> size-1);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43492779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档