40 lines
		
	
	
		
			925 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			925 B
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // -----------------------------------------------------------
 | |
| // lowest_bit.hpp
 | |
| //
 | |
| //           Position of the lowest bit 'on'
 | |
| //
 | |
| //         Copyright (c) 2003-2004, 2008 Gennaro Prota
 | |
| //
 | |
| // Distributed under the Boost Software License, Version 1.0.
 | |
| //    (See accompanying file LICENSE_1_0.txt or copy at
 | |
| //          http://www.boost.org/LICENSE_1_0.txt)
 | |
| //
 | |
| // -----------------------------------------------------------
 | |
| 
 | |
| #ifndef BOOST_LOWEST_BIT_HPP_GP_20030301
 | |
| #define BOOST_LOWEST_BIT_HPP_GP_20030301
 | |
| 
 | |
| #include <assert.h>
 | |
| #include "boost/pending/integer_log2.hpp"
 | |
| 
 | |
| 
 | |
| namespace boost {
 | |
| 
 | |
|     template <typename T>
 | |
|     int lowest_bit(T x) {
 | |
| 
 | |
|         assert(x >= 1); // PRE
 | |
| 
 | |
|         // clear all bits on except the rightmost one,
 | |
|         // then calculate the logarithm base 2
 | |
|         //
 | |
|         return boost::integer_log2<T>( x - ( x & (x-1) ) );
 | |
| 
 | |
|     }
 | |
| 
 | |
| 
 | |
| }
 | |
| 
 | |
| 
 | |
| #endif // include guard
 | 
