簡體   English   中英

我不明白以下C代碼行

[英]I don't understand the following C code line

我找到了以下帖子:
從ip和子網掩碼計算廣播地址,並鏈接到http://lpccomp.bc.ca/netmask/netmask.c

有人可以解釋下面這行,我不明白:

for ( maskbits=32 ; (mask & (1L<<(32-maskbits))) == 0 ; maskbits-- )

特別是mask & (1L<<(32-maskbits))

<<按位左移運算符 ; 它將剩余給定數量的值的位移位。 因此, 1L<<(32-maskbits)將值1移位到左32-maskbits時間。

&按位AND運算符

所以循環表達式mask & (1L<<(32-maskbits)) == 0測試mask值中的所有位,從低到高。 循環將停止在第一(最低)非零的位mask ,在該點maskbits將包含的比特數以上(包括)該位。

例如

  • 如果 mask == 0xFFFF mask == 0xFFFFFFFF (== binary 11111111111111111111111111111111) ,循環將在第一次迭代時停止,並且maskbits將為32
  • 如果 mask == 0x0001 mask == 0x00000001 (== binary 00000000000000000000000000000001) ,循環將在第一次迭代時再次停止,並且maskbits將為32
  • 如果 mask == 0x1000 mask == 0x01000000 (== binary 00000001000000000000000000000000) ,循環將在第24次迭代時停止,並且maskbits將為8

要了解發生了什么:運行它。

#include <stdio.h> 
#include <iostream>
using namespace std;

char *binary (unsigned int v) {
static char binstr[33] ;
int i ;

binstr[32] = '\0' ;
for (i=0; i<32; i++) {
binstr[31-i] = v & 1 ? '1' : '0' ;
v = v / 2 ;
}

return binstr ;
}

int main(void){  

  unsigned long maskbits,mask;  

mask = 0x01000000;
cout << "MASK IS: " << binary(mask) << "\n";
cout << "32 is: " << binary(32) << "\n\n";
for ( maskbits=32 ; (mask & (1L<<(32-maskbits))) == 0 ; maskbits-- ) {
cout << "maskbits: " << binary(maskbits) << "\n";
cout << "\t(32-maskbits): " << binary((32-maskbits)) << "\n";
cout << "\t1L<<(32-maskbits): " << binary((1L<<(32-maskbits))) << "\n";
cout << "\t(mask & (1L<<(32-maskbits))): " << binary((mask & (1L<<(32-maskbits)))) << "\n\n";

}

cout << "\nFinal maskbits: " << maskbits;

return 0;
}

http://ideone.com/eB8Kp

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM