na przykład dla 1, 2, 128, 256
wyjścia może być (16 cyfr):
0000000000000001
0000000000000010
0000000010000000
0000000100000000
próbowałem
String.format("%16s", Integer.toBinaryString(1));
umieszcza spacje na dopełnienie z lewej strony:
` 1'
Jak założyć 0
wyściółkę. Nie mogłem go znaleźć w programie Formatter . Czy jest inny sposób, aby to zrobić?
PS Ten post opisuje, jak formatować liczby całkowite z lewym dopełnieniem 0, ale nie jest to reprezentacja binarna.
java
binary
string-formatting
chaczik
źródło
źródło
%016s
?Exception in thread "main" java.util.FormatFlagsConversionMismatchException: Conversion = s, Flags = 0
Odpowiedzi:
Myślę, że to nieoptymalne rozwiązanie, ale możesz to zrobić
źródło
Returns a string representation of the integer argument as an unsigned integer in base 2.
Nie ma wbudowanej konwersji binarnej w java.util.Formatter, radziłbym użyć String.replace do zastąpienia znaku spacji zerami, jak w:
Lub zaimplementuj własną logikę do konwersji liczb całkowitych na reprezentację binarną z dodanym lewym dopełnieniem gdzieś wzdłuż linii podanych w tym przykładzie . Lub jeśli naprawdę potrzebujesz przekazać liczby do formatu, możesz przekonwertować swoją reprezentację binarną na BigInteger, a następnie sformatować ją z zerami wiodącymi, ale jest to bardzo kosztowne w czasie wykonywania, jak w:
źródło
Możesz użyć Apache Commons StringUtils . Oferuje metody wypełniania strun:
źródło
Próbowałem różnych wywołań metod, których wcześniej nie używałem, aby to działało, działały z umiarkowanym sukcesem, dopóki nie pomyślałem o czymś, co jest tak proste, że może po prostu zadziałać, i zadziałało!
Jestem pewien, że pomyślano o tym wcześniej, nie jestem pewien, czy jest to dobre dla długiego ciągu kodów binarnych, ale działa dobrze w przypadku ciągów 16-bitowych. Mam nadzieję, że to pomoże!! (Uwaga: drugi fragment kodu został ulepszony)
Dzięki Willowi za pomoc w ulepszeniu tej odpowiedzi, aby działała bez pętli. To może trochę niezdarne, ale działa, popraw i skomentuj, jeśli możesz ....
źródło
binString.length()
a 16 do utworzenia ciągu, a następnie dołączając ten ciąg do binString zamiast zapętlania, chociaż za pomocą czegoś takiego jak ta odpowiedź: stackoverflow.com/a/2804866/1353098Tutaj nowa odpowiedź na stary post.
Aby dopełnić wartość binarną wiodącymi zerami do określonej długości, spróbuj tego:
Jeśli
len = 4
ival = 1
,zwraca
"10001"
następnie ciągodrzuca pierwszy znak. Otrzymujemy więc to, czego chcemy:
Jeśli
val
może być negatywne, spróbuj:źródło
Prostsza wersja pomysłu użytkownika3608934 „To stara sztuczka, utwórz ciąg z 16 zerami, a następnie dołącz przycięty ciąg binarny, który otrzymałeś”:
źródło
Nie znam "właściwego" rozwiązania, ale mogę zaproponować szybką łatkę.
Właśnie go wypróbowałem i zobaczyłem, że działa dobrze.
źródło
%32s
?próbować...
Nie sądzę, żeby to był „właściwy” sposób na zrobienie tego ... ale działa :)
źródło
0000001111111111
dla wartości wejściowej1023
Każda wartość większa niż przyniesie wyjście ztoBinaryString(1024)
od10000000000
którego jest zbyt duży dlaparseInt(...)
W ten sposób wejście działa tylko dla 1K z 64K możliwych wartości wejściowychTo naiwne rozwiązanie
Mogłaby być inna metoda
Spowoduje to utworzenie 16-bitowego ciągu liczby całkowitej 5
źródło
Począwszy od Java 11, możesz użyć metody repeat (...) :
Lub, jeśli potrzebujesz 32-bitowej reprezentacji dowolnej liczby całkowitej:
źródło
To jest stara sztuczka, utwórz ciąg z 16 zerami, a następnie dołącz przycięty ciąg binarny otrzymany z String.format ("% s", Integer.toBinaryString (1)) i użyj 16 skrajnych prawostronnych znaków, odcinając wszelkie początkowe 0's. Jeszcze lepiej, stwórz funkcję, która pozwoli ci określić, jak długi ciąg binarny chcesz. Oczywiście istnieje prawdopodobnie miliard innych sposobów na osiągnięcie tego, w tym biblioteki, ale dodaję ten post, aby pomóc przyjacielowi :)
źródło
Napisałbym własną klasę util z metodą jak poniżej
}
Wynik:
To samo podejście można zastosować do dowolnych typów całkowitych. Zwróć uwagę na rodzaj maski
long mask = 1L << i;
źródło
Ta metoda konwertuje int na String, length = bits. Albo uzupełnione zerami, albo obcięte najbardziej znaczące bity.
źródło
Możesz użyć lib https://github.com/kssource/BitSequence . Akceptuje liczbę i zwraca bajnarny łańcuch, dopełniony i / lub zgrupowany.
źródło
str[i].length()
to długość liczby, powiedzmy, że 2 w systemie dwójkowym to 01, czyli długość 2, zmień 4 na żądaną maksymalną długość liczby. Można to zoptymalizować do O (n). używając Continue.źródło
// Poniżej znajdziesz odpowiednie rozmiary
źródło
źródło
numB
inum
są równi i nie różnią się w żaden sposób