ŠECU

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

ŠECU

OdgovorNapisal/-a s54mtb » 17 Feb 2017, 15:18

Še Ena C Uganka (ali pa dve)


1. Kakšen je rezultat (pojasni)
Koda: Izberi vse
(unsigned short)1 > -1


2. Kakšen je rezultat operacije
Koda: Izberi vse
-INT_MIN
s54mtb
 
Prispevkov: 6044
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 823 krat
Prejel zahvalo: 1869 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 20

Re: ŠECU

OdgovorNapisal/-a VolkD » 17 Feb 2017, 23:52

s54mtb je napisal/-a:1. Kakšen je rezultat (pojasni)
Koda: Izberi vse
(unsigned short)1 > -1
Tole bo verjetno True. Treba razumeti, da se gre za cast na short. -1 je pa privzeto int.
Dokler bodo ljudje mislili, da živali ne čutijo bolečine, bodo živali čutile, da ljudje ne mislijowww.S5tech.net
Uporabniški avatar
VolkD
Administratorji strani
 
Prispevkov: 18527
Pridružen: 29 Dec 2014, 20:49
Kraj: Kačiče (Divača)
Zahvalil se je: 3281 krat
Prejel zahvalo: 2654 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ŠECU

OdgovorNapisal/-a zanka » 18 Feb 2017, 00:36

Ni to dejansko podobno moji uganki z odgovorom: viewtopic.php?f=17&t=7702#p105066 ?

Torej bo false. Ampak :_banghead vidim; če signed tip lahko predstavi vse vrednosti unsigned tipa, potem se unsigned pretvori v signed. To pa gre, ker je maksimum unsigned short 2^16 < 2^31.
Uporabniški avatar
zanka
 
Prispevkov: 877
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 54 krat
Prejel zahvalo: 87 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 16

Re: ŠECU

OdgovorNapisal/-a SamoBr » 19 Feb 2017, 03:45

INT_MIN je najmanjša vrednost, ki se jo da zapisat v spremenljivko tipa int. To sem prebral, da je lahko različno glede na procesor.
Kaj nastane če daš spredaj minus pa ne vem.
SamoBr
 
Prispevkov: 2048
Pridružen: 14 Jun 2015, 14:45
Zahvalil se je: 108 krat
Prejel zahvalo: 168 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 31

Re: ŠECU

OdgovorNapisal/-a s54mtb » 19 Feb 2017, 22:16

SamoBr je napisal/-a:INT_MIN je najmanjša vrednost, ki se jo da zapisat v spremenljivko tipa int. To sem prebral, da je lahko različno glede na procesor.
Kaj nastane če daš spredaj minus pa ne vem.


Vidim, da se nekateri niso naučili najosnovnejših pojmov kljub vsem "ugankam", "malim" in "velikim" šolam... na tem forumu,



Da bo lažje.... recimo da so cela števila na neki arhitekturi prikazana največ z 8 biti, torej predznačen char.

Levo je binarna kombinacija bitov, desno je predznačeno celo število
01111111 127 (največje možno pozitivno število)
....
00000000 0
00000001 1
11111111 -1
....
10000000 -128

INT_MIN je torej -128
Če spremeniš predznak -INT_MIN je vrednost +128, kar pa se ne da prikazati. Torej je rezultat nedefiniran. Kaj se zgodi pri izvajanju programa s takim številom, pa je odvisno od tega, kako robusten je tak program.
s54mtb
 
Prispevkov: 6044
Pridružen: 15 Jan 2015, 01:10
Zahvalil se je: 823 krat
Prejel zahvalo: 1869 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 20

Re: ŠECU

OdgovorNapisal/-a zanka » 19 Feb 2017, 22:41

Kolikor sem bral, se svetuje izogibanje predznačenim številom, saj bitne operacije niso dobro definirane. Še posebno ne deluje zamik v desno, katerega se uporablja namesto deljenja z 2. Torej iz tvojih -128 dobim
-128 >> 1 = 64. :>
Uporabniški avatar
zanka
 
Prispevkov: 877
Pridružen: 17 Mar 2016, 01:16
Kraj: Krško
Zahvalil se je: 54 krat
Prejel zahvalo: 87 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 16

Re: ŠECU

OdgovorNapisal/-a Kroko » 20 Feb 2017, 02:33

Negativna števila lahko zapišemo na različne načine. V primeru 10000000 = -1 je to sistem twos complement, ki je tudi najbolj razširjen. Obstajajo pa še drugi načini.
https://en.m.wikipedia.org/wiki/Signed_ ... sentations

Bitne operacije so povsem definirane in s predznačenjem v bistvu sploh nimajo veze. Njih zanimajo samo biti.
http://www.planet-cnc.comKroko was here!
Uporabniški avatar
Kroko
 
Prispevkov: 3072
Pridružen: 14 Jan 2015, 12:12
Kraj: Ljubljana
Zahvalil se je: 531 krat
Prejel zahvalo: 1017 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 183


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost