首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这段代码中,未签名的交织器是否起着至关重要的作用?

在这段代码中,未签名的交织器是否起着至关重要的作用?
EN

Stack Overflow用户
提问于 2017-10-04 10:16:20
回答 1查看 59关注 0票数 0

我试图在java的数字中找到尾随0的数目。我从黑客的喜悦中得到了这段代码。但无法理解。根据黑客的喜悦(第5-4节),这应该给出尾随零的数量。

numOfTrailingZeros=32-numOfLeadingZeros(~(n&(n-1))) int

我试过56,它给了我32。下面是我的numOfLeading 0实现,令黑客高兴的是,方法numOfLeadingZeros的参数是无符号整数。它在这个方法中起着很大的作用,有人能解释一下它是如何工作的吗?

代码语言:javascript
复制
public static int numOfLeadingZeros(int x){
                    int n;
                    if(x==0) return (32);
                    n=1;
                    if((x & 0x0000FFFF) == 0) { n=n+16; x=x>>16;}
                    if((x & 0x000000FF) == 0) { n=n+8; x=x>>8;}
                    if((x & 0x0000000F) == 0) { n=n+4; x=x>>4;}
                    if((x & 0x00000003) == 0) { n=n+2; x=x>>2;}
                    return n - (x & 1);
}
EN

回答 1

Stack Overflow用户

发布于 2017-10-04 10:23:06

我不知道为什么你可以假设32 (字大小)-尾随0等于领先的0?

有符号整数实际上有符号位。他们使用一种名为“二的补码”的二进制编码结构。如果您要在二进制表示中查找前导或尾随零的数目,则不,无符号整数/有符号整数不重要。(编辑:如果你从来不传递负数或正数>2^word_size的一半,那就特别不相关了)。然而,56是0b00111000,当与0b00110111合并时,这个值仅为0b00110000。除第五位和第六位外,大部分产生0b1的否定(~),因此不存在前导零。)

这是因为有符号和无符号数学的基本程序集操作本质上是相同的,除了它如何影响进位。因此,当您试图分析某物的二进制结构时,它的类型在很大程度上与其数据宽度无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46562385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档