十进制数分解二进制哪一位是1
public static Set < Integer > extract ( Long sum) {
Set < Integer > authority = CollectionUtil . newLinkedHashSet ( ) ;
if ( sum != null ) {
String s = Long . toBinaryString ( sum) ;
int length = s. length ( ) ;
for ( int i = 0 ; i < length; i++ ) {
char c = s. charAt ( i) ;
if ( c == '1' ) {
authority. add ( length - i - 1 ) ;
}
}
}
return authority;
}
@AllArgsConstructor
public enum NodeEnum {
DATA ( 1 , "a" ) ,
APP ( 2 , "aa" ) ,
DATABASE ( 4 , "aaa" ) ,
MON ( 8 , "aaaa" ) ,
MIR ( 16 , "aaaaa" ) ,
PUB ( 32 , "aaaaa" ) ,
INTE ( 64 , "aaaaaaa" ) ;
int bit;
String desc;
public static Map < Integer , NodeEnum > getMap ( ) {
Map < Integer , NodeEnum > map = new HashMap < > ( ) ;
map. put ( 1 , DATA ) ;
map. put ( 2 , APP ) ;
map. put ( 4 , DATABASE ) ;
map. put ( 8 , MON ) ;
map. put ( 16 , MIR ) ;
map. put ( 32 , PUB ) ;
map. put ( 64 , INTE ) ;
return map;
}
}
import java. util. * ;
public class NodeUtils {
public static String [ ] getNodeDesc ( int type) {
Map < Integer , NodeEnum > map = NodeEnum . getMap ( ) ;
String s = Integer . toBinaryString ( type) ;
List < String > descList = new ArrayList < > ( ) ;
for ( int i = s. length ( ) ; i > 0 ; i-- ) {
if ( '1' == s. charAt ( i - 1 ) ) {
int a = 1 << ( s. length ( ) - i) ;
if ( Objects . nonNull ( map. get ( a) ) ) {
descList. add ( map. get ( a) . desc) ;
}
}
}
return descList. toArray ( new String [ 0 ] ) ;
}
public static void main ( String [ ] args) {
System . out. println ( Arrays . toString ( getNodeDesc ( 40 ) ) ) ;
System . out. println ( Arrays . toString ( getNodeDesc ( 7 ) ) ) ;
}
}