Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何查找从msb开始的第一个非零位_C - Fatal编程技术网

C 如何查找从msb开始的第一个非零位

C 如何查找从msb开始的第一个非零位,c,C,我有一个20字/字节的数组,存储160位的数字。如何查找从msb开始的第一个非零位。我需要找到位的位置,然后从第一个“1”位置相应地进行一些操作。您可以对每个字节进行迭代,直到找到第一个字节为止!=0对于等于零的每个字节,将计数器增加8 然后使用该字节执行右移操作(>>1),直到该值等于零。在每次移位中,将前一个计数器递增1。您可以对每个字节进行迭代,直到找到第一个字节为止!=0对于等于零的每个字节,将计数器增加8 然后使用该字节执行右移操作(>>1),直到该值等于零。在每个班次中,将前一个计数

我有一个20字/字节的数组,存储160位的数字。如何查找从msb开始的第一个非零位。我需要找到位的位置,然后从第一个“1”位置相应地进行一些操作。

您可以对每个字节进行迭代,直到找到第一个字节为止!=0对于等于零的每个字节,将计数器增加8


然后使用该字节执行右移操作(>>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

可能会有帮助的可能是