seb*_*ebi 4 c bitmask bitwise-operators
可能重复:
找到C中的最高位
我怎么能写一个C函数,将产生一个面具表示最左边的1在x.
例如:0xFF00 -> 0x8000和0x6600 -> 0x4000.至今:
int left1(unsigned x){}
Run Code Online (Sandbox Code Playgroud)
我明白了,0xFF00 == 1111 1111 0000 0000..
和0x6600 == 0110 0110 0000 0000..但我以后难住了.
caf*_*caf 15
您可以分两部分来完成:首先,使用一种称为"位拖尾"的技术,以确保第一个1右侧的所有位也是1:
x |= x >> 16;
x |= x >> 8;
x |= x >> 4;
x |= x >> 2;
x |= x >> 1;
Run Code Online (Sandbox Code Playgroud)
此时,输入0xFF00将x等于0xFFFF,输入0x6600将x等于0x7FFF.然后,我们可以1使用以下最高设置:
x ^= x >> 1;
Run Code Online (Sandbox Code Playgroud)
计算向右位移直到达到 1 所需的次数,然后将 1 向左位移相同的次数。
int ct=0;
while (x > 1) { ct++; x = x >> 1; }
x = x << ct;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15847 次 |
| 最近记录: |