16     int mask0= (
static_cast<int>(-(mask&0xffff)))>>31;
 
   17     mask&=(mask0^0xffff0000);
 
   18     int mask1= (
static_cast<int>(-(mask&0xff00ff)))>>31;
 
   19     mask&=(mask1^0xff00ff00);
 
   20     int mask2= (
static_cast<int>(-(mask&0xf0f0f0f)))>>31;
 
   21     mask&=(mask2^0xf0f0f0f0);
 
   22     int mask3= (
static_cast<int>(-(mask&0x33333333)))>>31;
 
   23     mask&=(mask3^0xcccccccc);
 
   24     int mask4= (
static_cast<int>(-(mask&0x55555555)))>>31;
 
   25     return 31+(mask0&0xfffffff0)+(mask1&0xfffffff8)+
 
   26       (mask2&0xfffffffc)+(mask3&0xfffffffe)+mask4;