ŠECU

Vse o programiranju na in za PC

Moderatorji: Kroko, tilz0R

ŠECU

OdgovorNapisal/-a s54mtb » 17 Feb 2017, 14: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: 6684
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 881 krat
Prejel zahvalo: 2127 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 19

Re: ŠECU

OdgovorNapisal/-a VolkD » 17 Feb 2017, 22: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: 20669
Pridružen: 29 Dec 2014, 19:49
Kraj: Kačiče (Divača)
Zahvalil se je: 3768 krat
Prejel zahvalo: 2943 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 255

Re: ŠECU

OdgovorNapisal/-a zanka » 17 Feb 2017, 23: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: 1153
Pridružen: 17 Mar 2016, 00:16
Kraj: Krško
Zahvalil se je: 69 krat
Prejel zahvalo: 108 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 20

Re: ŠECU

OdgovorNapisal/-a SamoBr » 19 Feb 2017, 02: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: 2188
Pridružen: 14 Jun 2015, 13:45
Zahvalil se je: 113 krat
Prejel zahvalo: 188 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 34

Re: ŠECU

OdgovorNapisal/-a s54mtb » 19 Feb 2017, 21: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: 6684
Pridružen: 15 Jan 2015, 00:10
Zahvalil se je: 881 krat
Prejel zahvalo: 2127 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 19

Re: ŠECU

OdgovorNapisal/-a zanka » 19 Feb 2017, 21: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: 1153
Pridružen: 17 Mar 2016, 00:16
Kraj: Krško
Zahvalil se je: 69 krat
Prejel zahvalo: 108 krat
Uporabnika povabil: DusanK
Število neizkoriščenih povabil: 20

Re: ŠECU

OdgovorNapisal/-a Kroko » 20 Feb 2017, 01: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: 3356
Pridružen: 14 Jan 2015, 11:12
Kraj: Ljubljana
Zahvalil se je: 589 krat
Prejel zahvalo: 1108 krat
Uporabnika povabil: Vrtni palček
Število neizkoriščenih povabil: 201


Vrni se na Programski jeziki

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 1 gost