C 如何查找从msb开始的第一个非零位
我有一个20字/字节的数组,存储160位的数字。如何查找从msb开始的第一个非零位。我需要找到位的位置,然后从第一个“1”位置相应地进行一些操作。您可以对每个字节进行迭代,直到找到第一个字节为止!=0对于等于零的每个字节,将计数器增加8C 如何查找从msb开始的第一个非零位,c,C,我有一个20字/字节的数组,存储160位的数字。如何查找从msb开始的第一个非零位。我需要找到位的位置,然后从第一个“1”位置相应地进行一些操作。您可以对每个字节进行迭代,直到找到第一个字节为止!=0对于等于零的每个字节,将计数器增加8 然后使用该字节执行右移操作(>>1),直到该值等于零。在每次移位中,将前一个计数器递增1。您可以对每个字节进行迭代,直到找到第一个字节为止!=0对于等于零的每个字节,将计数器增加8 然后使用该字节执行右移操作(>>1),直到该值等于零。在每个班次中,将前一个计数
然后使用该字节执行右移操作(>>1),直到该值等于零。在每次移位中,将前一个计数器递增1。您可以对每个字节进行迭代,直到找到第一个字节为止!=0对于等于零的每个字节,将计数器增加8
然后使用该字节执行右移操作(>>1),直到该值等于零。在每个班次中,将前一个计数器增加1。如果您使用的是gcc,则有内置函数正是这样做的(以及许多其他事情) 您要查找的可能是
\uuuuu-builtin\u-clz
(对于无符号整数)、\uuuuu-builtin\u-clzl
(对于无符号长字符)或\uuuuu-builtin\u-clzl
(对于无符号长字符)
从文件中:
返回x中前导0位的数目,从最高有效位位置开始。如果x为0,则结果未定义
因此,从最重要的整数开始检查整数(longs?longlongs?),直到找到第一个不是零的整数。然后使用适当的\uuuuuu内置clz
查找它有多少前导零,32(64)减去该数字是数字中最高1
位的位置
当然,如果您想与其他编译器兼容(这是您应该做的!),您可以自己实现
\uuuuu内置的
。如果您使用的是gcc,那么内置函数就可以做到这一点(以及其他许多事情)
您要查找的可能是\uuuuu-builtin\u-clz
(对于无符号整数)、\uuuuu-builtin\u-clzl
(对于无符号长字符)或\uuuuu-builtin\u-clzl
(对于无符号长字符)
从文件中:
返回x中前导0位的数目,从最高有效位位置开始。如果x为0,则结果未定义
因此,从最重要的整数开始检查整数(longs?longlongs?),直到找到第一个不是零的整数。然后使用适当的\uuuuuu内置clz
查找它有多少前导零,32(64)减去该数字是数字中最高1
位的位置
当然,如果您想与其他编译器兼容(这是您应该做的!),您可以自己实现\uuuu builtin\uCLZ
。可能会有帮助的可能是