Witam,
ostatnio zacząłem uczyć się języka Java. Czytając książkę natrafiłem na zadanie z którym mam problem.
Mianowicie mając zadeklarowaną zmienną int wartosc = 170 i byte wartosc2= 1 program ma wyświetlić binarna wartość zmiennej wartość.
Potrzebuję pomocy, gdyż te zadanie bardzo mnie flustruje. Czekam na pomysły.
Pozdrawiam
Integer.toBinaryString() ?
za trywialne... podaj pełną treść zadania
Napisz program, w którym jest zainicjowana zmienna int wartosc = 170 i za pomocą zmiennej byte wrt = 1 wyświetli na ekranie wartość binarną zmiennej wartość.
Robiąc to w taki sposób jak ty napisałeś nie jest mi potrzebna ta zmienna typu byte. Myślę, że chodzi tu o jakieś operacje przesunięć bitowych właśnie za pomocą tej zmiennej byte ale nie wiem jak to zrobić.
Komputer już trzyma wszelkie istniejące liczby w postaci binarnej, więc nic nie trzeba robić poza wyciągnięciem właściwego bita.
public class NativeBinary
{
public static void main(String[] args)
{
int wartosc = 170;
System.out.print("wartosc = ");
for(byte wrt = Integer.SIZE - 1; wrt >= 0; --wrt)
System.out.print(Character.forDigit((wartosc >>> wrt) & 1, 2));
System.out.println();
}
}
Nie wiem tylko po co przydzielać wrt wartość 1. Na nic się nie przydaje odczytywanie na samym początku pętli drugiej lub przedostatniej cyfry. No chyba, żeby coś zakombinować z podwójną prein(-de)krementacją. Można też użyć (wartosc >>>= 1) & 1, aby w ogóle wyeliminować zmienną sterującą. Tyle, że wtedy zmienna wartosc po wyświetleniu swoich cyfr wyzeruje się.
Niestety ten kod nie zwraca poprawnego wyniku.
Output:
wartosc = 00000000000000000000000010101010
powinno być "10101010", bo tak wygląda 170 w postaci binarnej...
To zmień kod tak, żeby ignorował zera dopóki nie wypisał pierwszej jedynki. Ogólnie mówiąc to 00050 jest tym samym co 50 (pomijając C).
Zjarek napisał(a)
To zmień kod tak, żeby ignorował zera dopóki nie wypisał pierwszej jedynki. Ogólnie mówiąc to 00050 jest tym samym co 50 (pomijając C).
masz pojęcie jak to zrobić?
public class NativeBinary
{
public static void main(String[] args)
{
int wartosc = 170;
System.out.print("wartosc = ");
boolean wiodąceZera = true; //wstępnie ustawione na tak
for(byte wrt = Integer.SIZE - 1; wrt >= 0; --wrt)
{
final int bit = ((wartosc >>> wrt) & 1);
if(wiodąceZera && bit != 0)
wiodąceZera = false;
if(!wiodąceZera)
System.out.print(Character.forDigit(bit, 2));
}
System.out.println();
}
}