/ tests / tests / compiler / examples / ntzgaudet.adl
ntzgaudet.adl
 1  
 2  program test.alpha {
 3      // The 'ntzgaudet' main function.
 4      // From Hacker's Delight 2nd ed. figure 5-24
 5      transition main(public x: u32) -> u8 {
 6          let y: u32 = x & 0u32.sub_wrapped(x);  // Isolate rightmost 1-bit
 7          let bz: u8 = (y != 0u32) ? 0u8 : 1u8;
 8          // 0x0000FFFF = 65535
 9          let b4: u8 = (y & 65535u32 != 0u32) ? 0u8 : 16u8;
10          // 0x00FF00FF = 16711935
11          let b3: u8 = (y & 16711935u32 != 0u32) ? 0u8 : 8u8;
12          // 0x0F0F0F0F = 252645135
13          let b2: u8 = (y & 252645135u32 != 0u32) ? 0u8 : 4u8;
14          // 0x33333333 = 858993459
15          let b1: u8 = (y & 858993459u32 != 0u32) ? 0u8 : 2u8;
16          // 0x55555555 = 1431655765
17          let b0: u8 = (y & 1431655765u32 != 0u32) ? 0u8 : 1u8;
18          return bz + b4 + b3 + b2 + b1 + b0;
19      }
20  }