Avatar billede axe2 Nybegynder
09. maj 2002 - 21:59 Der er 21 kommentarer og
1 løsning

2 komplement overflow <talsystem>

Ok dette har jeg fundet ud af.
ved addittion giver

pos + pos = neg -> overflow
neg + neg = pos -> overflow

men hvordan var  subtraktion reglen
Avatar billede jakoba Nybegynder
09. maj 2002 - 22:11 #1
pos + (-pos)  -> kan aldrig give overflow
neg - (-neg)  -> kan aldrig give overflow

pos + (-neg) = neg  -> overflow
neg + (-pos) = pos  -> overflow

mvh JakobA
Avatar billede jakoba Nybegynder
09. maj 2002 - 22:14 #2
So du kan se forstår jeg ikke rigtig dit spm.

den generelle regel er
  carry_out != mest_betydende_bit  =>  overflow

det gælder altid, hvadenten tallene er positive eller negative.

mvh JakobA
Avatar billede erikjacobsen Ekspert
09. maj 2002 - 22:14 #3
en slags "huskeregel": oversæt til addition

pos+(-neg) = pos+pos = neg ....uf..den sved...
Avatar billede erikjacobsen Ekspert
09. maj 2002 - 22:15 #4
Så så jakoba. Carry bit er til tal uden fortegn - ikke 2.komplement
Avatar billede jakoba Nybegynder
09. maj 2002 - 22:17 #5
Næe, det er da pjat.
#FF + #01  giver  #00  med carry out og er helt OK
Avatar billede erikjacobsen Ekspert
09. maj 2002 - 22:17 #6
Huskereglen burde nok være
pos-neg=pos+(-neg)=pos+pos  = neg  <-overløb
Avatar billede axe2 Nybegynder
09. maj 2002 - 22:19 #7
Huskereglen burde nok være
pos-neg=pos+(-neg)=pos+pos  = neg  <-overløb

ok Erik du er inde på det jeg ville have fat i, men
pos-neg=pos overflow ikk ;)
pos+pos  = neg  overflow ikk ;)
Avatar billede axe2 Nybegynder
09. maj 2002 - 22:20 #8
jakoba læs 2 komplement 2 komplement 2 komplement
Avatar billede erikjacobsen Ekspert
09. maj 2002 - 22:23 #9
jow, axe2
Avatar billede axe2 Nybegynder
09. maj 2002 - 22:25 #10
dvs, at det kun er et tilfælde af overflow ved subtraktion og 2 ved addition
Avatar billede erikjacobsen Ekspert
09. maj 2002 - 22:28 #11
nej, der er også 2 ved subtraktion - find det sekv
Avatar billede axe2 Nybegynder
09. maj 2002 - 22:31 #12
neg - neg = neg giver overflow hurraaaa eller.......
Avatar billede erikjacobsen Ekspert
09. maj 2002 - 22:33 #13
neg-neg=neg+(-neg)=neg+pos - altid ok

-5-3=-8  er jo også fint nok. Sund fornuft har sjældent skadet *G*
Avatar billede jakoba Nybegynder
09. maj 2002 - 22:39 #14
Pinligt, nu er jeg helt lost. Vil du være rar erikjacobsen?
Avatar billede axe2 Nybegynder
09. maj 2002 - 23:01 #15
he he tror det er meningen finder selv ud af det sidste
Avatar billede jakoba Nybegynder
09. maj 2002 - 23:18 #16
if (  op1_sign == op2_sign
    && op1_sign != res_sign ) {
    // overflow
} else {
    // no overflow
}

Ja det er eksakt det samme du startede med at sige. og gælder kun for addition.

Løsningen er som ej sagde at ved subtraktion starter man med at negere det der skal trækkes fra, så det er *altid* additon.

mvh JakobA
Avatar billede jakoba Nybegynder
09. maj 2002 - 23:21 #17
nu er det sgu rigtig pinligt. ej svarede og såvidt jeg kan se fattede du svaret før jeg gjorde.
Avatar billede axe2 Nybegynder
09. maj 2002 - 23:22 #18
Hvad er pinligt ;)
Avatar billede jakoba Nybegynder
11. maj 2002 - 12:44 #19
at få points for et forkert svar.

Så jeg har kikket videre på det. der er faktisk en fast of simpel regel for overflow. Det er blot ikke den jeg pladrede af mig i 09/05-2002 22:14:08

reglen er:

carry_ind_i_sign_bit  XOR  carry_ud_af_sign_bit  ==  overflow

og den forklarer også hvorfor vi skal negere først ved subtraktion. den den negereing kan nemlig selv give overflow:

    negate ( 1000 ) 
=  invert ( 1000 ) +0001
=  0111 +0001
=  1000     
hvor der er carry ind i sign. men ikke carry ud af sign.

men i praksis (i en adder) kan vi så lave den negering samtidig med additionen

    010101 - 101010
=  010101 + 010101 +carryIN
=  101011
hvir der er carry til signbit, men ikke udaf den, så det gav overflow.

Fidusen er at med den regel kan vi lave det hele med en adder i hardware.
Vi skal blot lave en xor kreds der beregner carry_til_sign XOR carry_udaf_sign i den høje ende af de tal der lægges sammen
Og en kreds i den lave ende der genererer en carry-in i den lave ende når det er subtraktion. (og så skal det tal der trækkes fra invertere, men det er nemt)

mvh JakobA
Avatar billede axe2 Nybegynder
11. maj 2002 - 23:27 #20
tillykke du har vundet 5 point, ;=)
Avatar billede axe2 Nybegynder
11. maj 2002 - 23:29 #21
det her er pladder ok

So du kan se forstår jeg ikke rigtig dit spm.

den generelle regel er
  carry_out != mest_betydende_bit  =>  overflow

det gælder altid, hvadenten tallene er positive eller negative.

mvh JakobA
Avatar billede erikjacobsen Ekspert
11. maj 2002 - 23:45 #22
Øh.... ved 2 komplement betyder carry intet. Det er kun fortegn på operander og
resultat der betyder noget.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester