mirror of
				https://github.com/f4exb/sdrangel.git
				synced 2025-10-31 04:50:29 -04:00 
			
		
		
		
	DATV: leandvb: use bitset to calculate Hamming weight of 32 and 64 bit integers
This commit is contained in:
		
							parent
							
								
									52d802baec
								
							
						
					
					
						commit
						3a5fddbf97
					
				| @ -1,4 +1,5 @@ | ||||
| #include "math.h" | ||||
| #include <bitset> | ||||
| 
 | ||||
| namespace leansdr | ||||
| { | ||||
| @ -16,12 +17,20 @@ int hamming_weight(uint16_t x) | ||||
| 
 | ||||
| int hamming_weight(uint32_t x) | ||||
| { | ||||
|     return hamming_weight((uint16_t)x) + hamming_weight((uint16_t)(x >> 16)); | ||||
|     return std::bitset<32>(x).count(); | ||||
|     // x = x - ((x >> 1) & 0x55555555);
 | ||||
|     // x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
 | ||||
|     // return (((x + (x >> 4)) & 0x0F0F0F0F) * 0x01010101) >> 24;
 | ||||
| //    return hamming_weight((uint16_t)x) + hamming_weight((uint16_t)(x >> 16));
 | ||||
| } | ||||
| 
 | ||||
| int hamming_weight(uint64_t x) | ||||
| { | ||||
|     return hamming_weight((uint32_t)x) + hamming_weight((uint32_t)(x >> 32)); | ||||
|     return std::bitset<64>(x).count(); | ||||
|     // x = x - ((x >> 1) & 0x5555555555555555);
 | ||||
|     // x = (x & 0x3333333333333333) + ((x >> 2) & 0x3333333333333333);
 | ||||
|     // return (((x + (x >> 4)) & 0x0F0F0F0F0F0F0F0F) * 0x0101010101010101) >> 56;
 | ||||
| //    return hamming_weight((uint32_t)x) + hamming_weight((uint32_t)(x >> 32));
 | ||||
| } | ||||
| 
 | ||||
| unsigned char parity(uint8_t x) | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user