Lehet használni 1 bytos integert c++-ban? A char ha jól tudom így funkcionál, de használható minden tekintetben egész számként, azaz az aritmetikai műveletek érvényesek rá?
nekem 1 bytos integer kéne!
azaz char+char a kérdés!
Idézem magam: "Másfelől erre vannak szabályok: mindig arra kasztolódik fel a műveletben a két operandus, amiben elfér mindkét operandus."
Szerinted ha két chart akarsz összeadni, akkor mi az az adattípus, amiben elfér egy char és egy char is? Na? Csak nem a char?
"használható minden tekintetben egész számként, azaz az aritmetikai műveletek érvényesek rá?"
Igen.
"A char lassabb, mint a short int."
Csak sima józan paraszti ésszel a char a gyorsabb mert kisebb, de gyakorlatba meg architektúra függő lehet.
Csak kíváncsiságból csináltam rá egy egyszerű tesztet. Persze a sebesség összehasonlításánál az sem mindegy hogy milyen aritmetikai műveleteket hasonlítunk össze. Nem bonyolítottam túl én a += operátor által elvégzett aritmetikai műveletet választottam. Persze a tesztet befolyásolta a háttérbe futó processzek, mivel multitask-os rendszert használok, de nagyságrendileg nem folyásolta be csak bizonyos %-ig. Ezért 3 változatból 3-3 tesztet csináltam.
short int.cpp:
int main(){
short int a=10,b=20;
for (unsigned int i=0;i<100000000;i++){
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
}
return 0;
}
char.cpp:
int main(){
short int a=10,b=20;
for (unsigned int i=0;i<100000000;i++){
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
a+=b;
}
return 0;
}
uresciklus.cpp:
int main(){
for (unsigned int i=0;i<100000000;i++){
}
return 0;
}
a+=b;-ből azért írtam olyan sokat mert különben az idő nagy része a ciklusváltozó növelésével illetve a ciklusmagba való belépés ellenőrzésével telt el.
Íme a teszt eredménye:
----------------------------
ures ciklus:
real 0m0.343s
user 0m0.340s
sys 0m0.000s
----------------------------
ures ciklus:
real 0m0.342s
user 0m0.340s
sys 0m0.000s
----------------------------
ures ciklus:
real 0m0.339s
user 0m0.332s
sys 0m0.004s
----------------------------
char:
real 0m5.903s
user 0m5.892s
sys 0m0.000s
----------------------------
char:
real 0m5.921s
user 0m5.916s
sys 0m0.000s
----------------------------
char:
real 0m5.822s
user 0m5.808s
sys 0m0.004s
----------------------------
short int:
real 0m5.903s
user 0m5.892s
sys 0m0.000s
----------------------------
short int:
real 0m5.899s
user 0m5.888s
sys 0m0.000s
----------------------------
short int:
real 0m5.920s
user 0m5.908s
sys 0m0.000s
Nem látom azt hogy az egyik gyorsabb lenne mint a másik, de az meg szembetűnő hogy az üres ciklus gyorsabb.
De hülye vagyok mindkét helyre short int-et írtam.
Korrigáltam a hibát.
Akkor még is az lett amit sejtettem a char a gyorsabb:
----------------------------
ures ciklus:
real 0m0.341s
user 0m0.336s
sys 0m0.000s
----------------------------
ures ciklus:
real 0m0.340s
user 0m0.336s
sys 0m0.000s
----------------------------
ures ciklus:
real 0m0.340s
user 0m0.336s
sys 0m0.000s
----------------------------
char:
real 0m5.883s
user 0m5.872s
sys 0m0.000s
----------------------------
char:
real 0m5.897s
user 0m5.884s
sys 0m0.004s
----------------------------
char:
real 0m5.909s
user 0m5.904s
sys 0m0.000s
----------------------------
short int:
real 0m5.944s
user 0m5.936s
sys 0m0.000s
----------------------------
short int:
real 0m5.950s
user 0m5.940s
sys 0m0.000s
----------------------------
short int:
real 0m5.964s
user 0m5.956s
sys 0m0.000s
"Az üres ciklust valószínűleg kioptimizálja a fordító, így le sem fut az a ciklus."
Ez nem igaz, a ciklusváltozót 5x-ösére átírtam így a futási idő:
"
real 0m1.721s
user 0m1.712s
sys 0m0.004s
"
Ha kiveszem az üres ciklust akkor:
"
real 0m0.002s
user 0m0.000s
sys 0m0.000s
"
Ez csupán az üres program futási ideje vagyis a processz inicializáló meg deinicializáló rutin ennyi idő alatt fut le.
Ha az kód optimalizálást bekapcsolom (kipróbáltam) akkor az van amit te mondasz, de szándékosan nem így tettem.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!