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 }