[ Aleksa Stankovic @ 23.07.2008. 17:30 ] @
Napisao sam program koj pokazuje da je int zapravo niz od cetiri char-a. Iako nema neku upotrebnu funkciju, smatram da je zanimljiv pa sam resio da ga objavim. Sustina je da se moze uociti povezanost svakog od 4 char-a koji cine int(u zavisnosti od unesenog broja), tj pokazuje unutrasnju reprezantaciju tipa int.

Code:


#include <iostream>
#include <new>
using namespace std;
int main()
{
    string res;
    do
    {
    cout << "unesite broj:\n";
    int broj;
    cin >> broj;
    cout << "\n\n";
    
    char *m=new char[sizeof(int)];
    int *a=new (m) int(broj);
    for(int i=0; i<sizeof(int); i++)
    std::cout << (int)m[i] << "\n";
    cout << "\nZelite li da izadjete([da][ne])\n"  ;
    (cin >> res);
    } while ( res=="ne");
    
    return 0;

}



[Ovu poruku je menjao Aleksa Stankovic dana 23.07.2008. u 20:48 GMT+1]
[ itf @ 23.07.2008. 19:15 ] @
(long) int se sastoji od 4 bajta, a char od samo jednog pa je i logično da "trebaju" 4 char-a za takav int. no opet, pogrešno je reći da je int zapravo niz od cetiri char-a. može ga se tako interpretirati, no po definiciji (long) int je cijeli broj od 4 bajta.
[ kiklop74 @ 23.07.2008. 22:57 ] @
Svaki tip u C/C++-zauzima određenu količinu memorijskog prostora (kao uostalom i u većini programskih jezika).

Bajt je sekvencijalni niz bitova konstantne (unapred predodređene) veličine. Na najvećem broju sistema ova predodređena veličina je 8, ali je to tako zato što je 70-tih i 80-tih vladalo carstvo 8-bitnih procesora u širokim narodnim masama pa se to pretvorilo u neki sinonim.

Bajt je takođe i najmanji mogući deo računarske reči (word) nad kojim je moguće izvršiti neku operaciju. Word je stvar dizajna nekog procesora i upravo po tome imamo različite procesore (4-bit, 16-bit. 32-bit, 64-bit itd.) koji u stvari predstavljaju veličinu reči.

Zbog čega ceo ovaj uvod?

Zato što na kraju krajeva C odnosno C++ operiše sa parčetom memorije. Šta se nalazi u tom parčetu memorije nije toliko značajno jer se lako da promeniti prostim kastovanjem.

Na primer:

Code:

int test = 6381921; //0x00616161


U memoriji je predstavljen sa 4 bajta na 32-bitnim sistemima. U slučaju da ne znamo veličinu tipa možemo da koristimo sizeof:

Code:

std::cout << sizeof(test) << std::endl;



promenjiva test u memoriji sistema je predstavljena ovako:

1 bajt 2bajt 3bajt 4bajt
01100001 01100001 01100001 00000000

Ako sada promenimo tip koji pokazuje na tu adresu u char dobijamo klasican C string.
Code:

char *nesto = (char*)&test;
std::cout << nesto << std::endl;


ovaj kod ce da ispise aaa zato sto u memoriji vidi tri bajta koji u sebi imaju vrednost ascii 97 i cetvrti 0 koji predstavlja zavrsetak standardnog c stringa.

Ovo ne znaci da je char int ili da je int skup karaktera. Ovo samo pokazuje kako se moze pristupiti memoriji na razlicite nacine jer jezik operiše direktno nad memorijom.
[ deerbeer @ 24.07.2008. 12:51 ] @
http://www.fredosaurus.com/notes-cpp/expressions/bitops.html
Imas na ovom linku konkretnu primenu kako da pomocu bitwise operatora pakujes vise promenljivih u jednu
tako da mozes cak celu strukturu da zapises u jedan int broj

EDIT:
http://www.postech.ac.kr/class/cs103/2008/materials/Lec05.pdf
[ Nedeljko @ 01.08.2008. 10:41 ] @
Zainteresovani za floating problematiku mogu da posete advocacy

http://www.elitesecurity.org/t303962-0#1811310