Najlepsza odpowiedź
Różnica czarno-biała Krótka i długa int
Cóż, różnica jest bardzo mała, ale w niektórych przypadkach może być bardzo ważna. Podczas programowania drugim najważniejszym celem (po wykonaniu programu zgodnie z jego przeznaczeniem) jest oszczędzanie pamięci, aby program działał jak najszybciej. W tym miejscu pojawia się słowo kluczowe „long”. Long jest liczbą całkowitą, ale liczba całkowita nie jest dokładnie długim zrozumieniem? Istnieje również słowo „short”. Obecnie zwykle są one oznaczone jako int, ale nie jest to wymagane. różnica między nimi to ich rozmiar. W zależności od komputera, ale w większości przypadków „krótki” to dwa bajty, „długi” to cztery bajty, a „int” może mieć dwa lub cztery bajty. W programach ważne jest, aby to zadeklarować krótka lub długa, jeśli dokładnie wiesz, jak duża będzie ta liczba i jak często będzie modyfikowana, aby można było zaoszczędzić jak najwięcej pamięci. Teraz, jeśli chodzi o zakres zależny od rozmiaru int, czy to ma dwa lub cztery bajty. Oto tabela z odniesieniami do rozmiarów i wartości.
typ zakres rozmiarów
short int 2 bajty -32 768 do 32767
long int 4 bajty -2 147 483 648 do 2 147 483 647
int (16 bitów) 2 bajty -32 768 do 32767
int (32 bity) 4 bajty -2147 , Od 483 648 do 2 147 483 647
Różnica B / w zmiennoprzecinkowa i podwójna
Liczby zmiennoprzecinkowe, zwane także liczbami rzeczywistymi liczby są używane podczas obliczania wyrażeń, które wymagają ułamkowej precyzji. Na przykład obliczenia, takie jak pierwiastek kwadratowy lub transcendentalne, takie jak sinus i cosinus, dają w wyniku wartość, której precyzja wymaga typu zmiennoprzecinkowego. Java implementuje standardowy (IEEE – 754) zbiór typów i operatorów zmiennoprzecinkowych. Istnieją dwa rodzaje typów zmiennoprzecinkowych, zmiennoprzecinkowe i podwójne, które reprezentują odpowiednio liczby o pojedynczej i podwójnej precyzji. Ich szerokość i zakresy są pokazane tutaj:
Szerokość nazwy w zakresie bitów
double 64 1 .7e – 308 do 1.7e + 308
float 32 3 .4e – 038 do 3.4e + 038
Każdy z tych Następnie sprawdzane są typy zmiennoprzecinkowe.
float
Typ float określa wartość o pojedynczej precyzji, która wykorzystuje 32 bity pamięci. Pojedyncza precyzja jest szybsza na niektórych procesorach i zajmuje o połowę mniej miejsca niż podwójna precyzja, ale stanie się nieprecyzyjna, gdy wartości będą bardzo duże lub bardzo małe. Zmienne typu float są przydatne, gdy potrzebujesz składnika ułamkowego, ale nie wymagają dużego stopnia dokładności. Na przykład zmiennoprzecinkowe mogą być przydatne do reprezentowania dolarów i centów.
Oto kilka przykładowych zmiennych typu float deklaracje:
float hightemp, lowtemp;
double
Podwójna precyzja, oznaczona słowem kluczowym double, wykorzystuje 64 bity do przechowywania wartości. Podwójna precyzja jest w rzeczywistości szybsza niż pojedyncza precyzja w niektórych nowoczesnych procesorach, które zostały zoptymalizowane pod kątem szybkich operacji matematycznych obliczenia. Wszystkie transcendentalne funkcje matematyczne, takie jak sin (), cos () i sqrt (), zwracają wartości podwójne. Jeśli chcesz zachować dokładność wielu obliczeń iteracyjnych lub manipulujesz liczbami o dużej wartości, najlepszym wyborem jest podwójne .
Oto krótki program, który używa podwójnych zmiennych do obliczenia pola koła:
// Oblicz th e obszar koła.
class Area {
public static void main (String args []) {
double pi, r, a;
r = 10,8; // promień okręgu
pi = 3.1416; // pi, około
a = pi * r * r; // oblicz pole
System.out.println („Obszar koła to” + a);
}
}
Odpowiedz
Jak zwykle, to zależy . Dokładne rozmiary szortów i długości są pozostawione realizatorowi kompilatora, który wybierze reprezentacje najlepiej pasujące do architektury docelowej. Jest możliwe (ale mało prawdopodobne), że sizeof(short) == sizeof(int) == sizeof(long)
, co oznacza, że wszystkie są takie same. Jedyną gwarancją, jaką masz, jest to, że rozmiar spodenek jest mniejszy lub równy rozmiarowi long. Aby uzyskać dokładne rozmiary, użyj nagłówka
; lub aby wyodrębnić brzydkie szczegóły, użyj szablonu std::numeric\_limits
z
.
Podobna argumentacja dotyczy float i double, ale tutaj jest bardziej prawdopodobne, że float
będzie reprezentować liczbę zmiennoprzecinkową o pojedynczej precyzji (4 bajty), a double
będzie liczba zmiennoprzecinkowa podwójnej precyzji (8 bajtów).Napisano zbyt dużo oprogramowania, które zakłada, że IEEE 754, jest mniej prawdopodobne, że twórcy kompilatorów odejdą od reguł.