想问一下一个C语言的位运算小问题.
有没有一个简单的表达式的写法,可以得到一个32位无符号数,只保留其最左侧或者最右侧的1的结果?
比如35=(000..0100011),得到32或者1?
用循环写的话不难,但,用一个简洁的表达式能写出来吗?
想问一下一个C语言的位运算小问题.
有没有一个简单的表达式的写法,可以得到一个32位无符号数,只保留其最左侧或者最右侧的1的结果?
比如35=(000..0100011),得到32或者1?
用循环写的话不难,但,用一个简洁的表达式能写出来吗?
在C语言中,可以使用按位与运算符(&)和按位右移运算符(>>)来得到一个32位无符号数的最左侧或最右侧的1。
要得到最左侧的1,可以使用如下表达式:
num & -num
要得到最右侧的1,可以使用如下表达式:
num & (num - 1)
解释如下:
high:
low
0 都需要提前判断。