Jos*_*son 8 c bitwise-operators
在GNU C中获取/设置整数最高位的最便携方法是什么?
这是彭博采访问题.那个时候我没有给出最好的答案.有人可以回答吗?
谢谢
如果类型未签名,则很容易:
(type)-1-(type)-1/2
Run Code Online (Sandbox Code Playgroud)
对于签名值,我不知道.如果你找到了一种方法,它将回答关于SO的几个未解答的问题:
也许其他人.
首先,请注意,如果我们谈论有符号整数,则没有可移植的方法来访问最高位; 标准中没有定义单个可移植表示,因此"顶部位"的含义原则上可以变化.另外,C不允许直接访问按位表示; 您可以将int作为char
缓冲区访问,但您不知道"顶部位"的位置.
如果我们只关注有符号整数的非负范围,并假设所述范围的大小是2的幂(如果不是,那么我们需要再次关注有符号的表示):
#define INT_MAX_BIT (INT_MAX - (INT_MAX >> 1))
#define SET_MAX_BIT(x) (x | INT_MAX_BIT)
#define CLEAR_MAX_BIT(x) (x & ~INT_MAX_BIT)
Run Code Online (Sandbox Code Playgroud)
类似的方法可以与无符号整数一起使用,它可以用来获得真正的顶部位.
归档时间: |
|
查看次数: |
2219 次 |
最近记录: |