我需要解释一下这条特定的线是如何工作的.
我知道这个函数计算1位的数量,但这条线究竟是如何清除最右边的1位?
int f(int n) {
int c;
for (c = 0; n != 0; ++c)
n = n & (n - 1);
return c;
}
Run Code Online (Sandbox Code Playgroud)
有人可以简单地向我解释一下或给出一些"证明"吗?
我正在阅读Beej的指南,他谈到了创建的不同结构程序员.他说我们可以将sockaddr_storage/in6/in传递给addrinfo,它将被转换为sockaddr,但它究竟有多可能?sockaddr是16个字节,而sockaddr_in6是28个字节.
我阅读了RFC 3493的一小部分内容:
请注意,sockaddr_in6结构通常比
通用sockaddr结构大.在许多现有的实现中,sizeof(struct sockaddr_in)等于sizeof(struct sockaddr),两者
都是16个字节.
在转换为IPv6时,需要仔细检查做出此假设的任何现有代码.
但它没有解释当sockaddr_in6被转换为sockaddr时会发生什么.