Cast double do int.

Cast double do int.
TR
  • Rejestracja:około 13 lat
  • Ostatnio:około 13 lat
  • Postów:16
0

Mam takie małe pytanie: Czy cast z double do float spowoduje, że pointer będzie wskazywał zły adres (tkzw. nie mieści się w obszarze int, double)?

np.

Kopiuj
int* i = NULL;
double a = 3.14;
	
i = reinterpret_cast<int*>(&a);
a = 5;

cout<<*i; //Zamiast 5 widze 0, albo zamiast 3.14 widze miliniowe liczby
edytowany 1x, ostatnio: trux
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
0

w ten sposób dobierasz się do binarnej reprezentacji double i interpretujesz ją jako int.
Poczytaj jak komputer przechowuje dane, poszukaj na wiki, np: ieee 754


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
TR
  • Rejestracja:około 13 lat
  • Ostatnio:około 13 lat
  • Postów:16
0

Jak włączyć podgląd "pamięci" w moim programie, czyli pod jakims adresem jest jaki obiekt, co przechowuje itd.

MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
0

każde przyzwoite IDE (jak Code::Blocks, Eclipse, Visual Studio, Qt Creator, .... ), ma opcję debugger-a, uruchamiania programu krok po kroku i możliwość podglądania zawartości zmiennych (lub całych fragmentów pamięci).


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
edytowany 1x, ostatnio: MarekR22
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

@trux nie bardzo rozumiem. Wystarczy że uruchomisz to pod debuggerem i będziesz mógł sobie takie rzeczy oglądać.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
TR
  • Rejestracja:około 13 lat
  • Ostatnio:około 13 lat
  • Postów:16
0

Już mam, jeszcze mam pytanko.

Jak są zbudowane wskaźniki? tkzw. jako value przechowują adres do, którego się odnoszą a gdy kompilator do tego adresu dochodzi to wykrywa, że to jest adres i przenosi się pod ten adres itd.?

edytowany 1x, ostatnio: trux
Shalom
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Kompilator? Kompilator nie działa przecież w runtimie. Masz zmienną która przechowuje jakiś adres. W trakcie dereferencji tego adresu następuje po prostu załadowanie wartości która znajduje się pod tym adresem i tyle. Kompilator po prostu generuje taki kod asemblera. Kompilator absolutnie nic nie "wykrywa" tym bardziej nie w C/C++. Możesz wepchnąć do wskaźnika co chcesz i próbować się odwołać do takiej pamięci (skończy się zwykle błędem oczywiście, bo system operacyjny pilnuje żeby tak nie robić).


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:3 minuty
0

Dla komputera nie ma różnicy między int, double, char, int*. Dla procesora to jest jedynie sterta zer i jedynek.
Dopiero kod programu, ma w sobie wpisane założenia, tu zapisane jest coś co reprezentuje char, a tam coś co reprezentuje adres wskazujący na double.
To twój kod w C++ narzuca wynikowemu programowi taką a nie inną interpretację, danych. Dla procesora nie ma to najmniejszego znaczenia.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
rincewind
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 8 lat
0
MarekR22 napisał(a)

Dla komputera nie ma różnicy między int, double, char, int*. Dla procesora to jest jedynie sterta zer i jedynek.
Dopiero kod programu, ma w sobie wpisane założenia, tu zapisane jest coś co reprezentuje char, a tam coś co reprezentuje adres wskazujący na double.
To twój kod w C++ narzuca wynikowemu programowi taką a nie inną interpretację, danych. Dla procesora nie ma to najmniejszego znaczenia.

To będzie czepialstwo, ale nie potrafię sobie tego odmówić: istnieją architektury, dla których typ wskaźnika ma znaczenie, bo np. mają różny rozmiar, o czym można przeczytać tutaj: http://c-faq.com/null/machexamp.html

Ale jak wspomniałem: czepialstwo, nie podejrzewam, żeby autor pytania uczył się na takim nietypowym systemie. :) Mimo to uważam to za fajną ciekawostkę.


MarekR22
Nie powiedziałby, że to czepialstwo, ale niezrozumienie o czym ja pisałem. To, że maszyna adresuje słowami a nie bajtami, nie ma znaczenia, nadal to program jest odpowiedzialny za interpretacje co zwiera pamięć, tak samo przy interpretacji czy jest to wskaźnik na int, czy fragment wskaźnika na char. Chociaż, obecnie procesor ma "świadomość" czy ma do czynienia z kodem, czy z danymi.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.