【发布时间】:2020-09-17 13:13:33
【问题描述】:
得到函数 getLeftBits(int n,int num) 我需要从左边返回 num 位例如:
getLeftBits(7,31) --> 3
getLeftBits(-1,2) --> 3
我为每个 n>0 轻松处理:n >> (32 - num)
但是当 n
有什么建议吗?
【问题讨论】:
-
你想要发生什么?
n是int还是unsigned int?使用int,您将在左侧获得符号扩展填充,但使用unsigned int,您将获得零填充。根据您的第二个示例,您可能希望第一个参数是无符号的,因此:unsigned int getLeftBits(unsigned int n,int num) { return n >> (32 - num); }。另外,如果num为零(无论n的值如何,您总是会得到相同的结果)怎么办?或者,如果num是否定的,您想要发生什么? -
@CraigEstey:它是由实现定义的你是否会在左边得到一个符号扩展填充或其他东西。 C17 6.5.7 位移位运算符
E1 >> E2的结果是E1右移E2位位置。如果E1具有无符号类型或E1具有带符号类型和非负值,则结果的值是E1/2^E2商的整数部分。如果E1具有带符号类型和负值,则结果值是实现定义的。
标签: c binary bit-manipulation