我有在C函数应该返回最负二补数:
int mostNegTwosComp(void) {
return 0;
}
我不得不使用最多4个运算符。这些运营商包括:! ~ & ^ | + << >>
。我将如何去这样做呢?那岂不是最负二层的补偿数量取决于有多少位选择的是多少?例如,10000将是一个16位的整型最负二层的补偿是多少?
如果你并不需要一个便携版本,你可以滥用知识整数几乎都是4个字节。
return 0x80000000;
事实上,如果你知道你要返回类型的大小,你可以跳过按位游戏,并与格式的金手指:
但是,为了回答你的问题的其余部分。
我将如何去这样做呢?
如果你模板化,你会(可能)使用按位招对方的回答暗示。否则,你可以用上面的代码欺骗或limits.h中(IIRC)使用的定义。
~ (~0u >> 1);
将是一个便携式解决方案。
那岂不是最负二层的补偿数量取决于有多少位选择的是多少?
最负二层的赞美是取决于包含变量的大小,所以我想“选择号码”你可以说。实际上,该值的范围依赖于含有可变量的大小。
例如,10000将是一个16位的整型最负二层的补偿是多少?
对于16位,最负二层的补偿将是0x8000
,0b1000000000000000
或-32768
,这取决于您希望如何处理它代表。
return ~ (~0u >> 1);
~
开启在unsigned
零所有位。然后>> 1
向右移动,导致高比特变为零。然后~
反转所有位,产生在其余1个在高比特和零。
然后return
转换这int
。这有实现定义的行为,但是这种类型的课堂作业通常假定适合的锻炼行为。