2016-01-11 5 views
3

Je voudrais créer un nombre binaire x-bit et spécifier le nombre de bits le plus à gauche.Comment créer un nombre binaire x-bit avec le nombre de bits le plus à gauche

IE pour créer un nombre de 8 bits avec 6 bits les plus à gauche tous ensemble comme dans 1111 1100

De même pour créer 16 bits - nombre avec le 8 reste des bits tous ensemble résultant dans 1111 1111 0000 0000

Besoin d'être capable de faire cela pour les grands nombres (128 bits). Existe-t-il un moyen existant de le faire en utilisant les bibliothèques de base?

Merci

+2

Que diriez-vous de 'BitSet'? – Kayaman

+0

Comment voulez-vous que vos numéros de 128 bits soient représentés? Est-ce qu'un BitSet est suffisant, ou voulez-vous un BigInteger? Avez-vous besoin de prendre en charge toute largeur de nombre (par exemple, 127 bits?), Ou juste des puissances de deux (comme 8,16,32,64,128)? –

Répondre

1

Pensez à utiliser un BitSet, comme ceci:

import java.util.BitSet; 

/** 
* Creates a new BitSet of the specified length 
* with the {@code len} leftmost bits set to {@code true}. 
* 
* @param totalBits The length of the resulting {@link BitSet}. 
* @param len  The amount of leftmost bits to set. 
* @throws IllegalArgumentException If {@code len > totalBits} or if any of the arguments is negative 
*/ 
public static BitSet leftmostBits(int totalBits, int len) 
{ 
    if (len > totalBits) 
     throw new IllegalArgumentException("len must be smaller or equal to totalBits"); 
    if (len < 0 || totalBits < 0) 
     throw new IllegalArgumentException("len and totalBits must both be positive"); 
    BitSet bitSet = new BitSet(totalBits); 
    bitSet.set(0, len); 
    return bitSet; 
} 

Here are some unit tests

Ensuite, vous pouvez l'utiliser BitSet en utilisant son public API (ici Java 8 est montré):

BitSet public API as of Java 8

BitSet a été conçu pour cette (manipulation précise bits), et il vous donne une longueur arbitraire et (ne vous limite pas à 64 bits, comme par exemple long serait).

+0

Je dois supporter 128 mais les nombres mais je dois être capable de spécifier le nombre de bits gauches arbitrairement. c'est-à-dire créer un nombre de 128 bits avec les 122 bits les plus à gauche mis à 1. Plus im utilisant java 7 – user805703

+0

J'ai édité ma réponse. Essayez-le, je ne l'ai pas testé. – RAnders00

0

Vous pouvez utiliser deux boucles. Un pour tous les 1 et un autre pour tous les 0.

ou en utilisant Java 8 que vous pouvez faire

InStream.range(0, ones).forEach(i -> System.out.print(1)); 
InStream.range(ones, bits).forEach(i -> System.out.print(0)); 
+1

Ceci ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son article. - [De l'examen] (/ review/low-quality-posts/10855306) – skypjack

+0

@skypjack alors qu'il ne fournit pas une réponse complète, il dit ce que le PO devrait faire. Ceci est juste deux lignes de code. Combien plus d'explications pouvez-vous donner sans faire leurs devoirs pour eux? –

+1

J'ai commenté il y a 3 heures, vous avez édité la question il y a 50 minutes, puis vous avez commenté en demandant ce qui ne va pas. Es-tu sérieux? Ce n'était pas une réponse complète, maintenant il a quelques détails de plus et peut-être peut être bien. Je vous remercie. – skypjack