@Wladimirufc: As I said, this is the functional equivalent. Most computer cpus would have a negate instruction which performs these operations in the chip's circuitry, or achieve the same result by subtraction from zero. Dave
On Tuesday, August 21, 2012 4:58:14 PM UTC-5, wladimirufc wrote: > I understand two complement but i don`t knew it this instruction x = -x > was translate in x =(~x) + 1 > > thanks! > > Wladimir Araujo Tavares > *Federal University of CearĂ¡ <http://lia.ufc.br/%7Ewladimir/> > Homepage <http://lia.ufc.br/%7Ewladimir/> | > Maratona<https://sites.google.com/site/quixadamaratona/>| > * > > > > > On Tue, Aug 21, 2012 at 2:36 PM, gmag...@gmail.com <javascript:> < > gmag...@gmail.com <javascript:>> wrote: > >> @dave Nice explanation! >> >> >> Yanan Cao >> >> >> >> On Tue, Aug 21, 2012 at 10:32 AM, Dave <dave_an...@juno.com <javascript:> >> > wrote: >> >>> @Wladimirufc: You responded that the type is int. This data type >>> (usually) is 32 bits in length, and stores integers in the twos-complement >>> number system. See http://en.wikipedia.org/wiki/Two%27s_complement for >>> an explanation of this number system. In this number system, the bits >>> (numbered 0 to 31 from the right) have values 2^i (2 to the ith power) for >>> i = 0, 1, ..., 30, while bit 31 has value -2^31. >>> >>> In your code, you set x to have a 1-bit in bit 31 and zeros elsewhere. >>> Thus, the value of x is -2^31, which is the value printed by the first >>> printf() statement. This value is negative, so the value is negated. In >>> twos-complement arithmetic, a value is negated by complementing the value >>> (switching 0s to 1s and 1s to 0s) and then adding 1. I.e., the statement x >>> = -x is functionally equivalent to x = (~x) + 1. For your value of x, the >>> resulting value is the same as the original value, so the second printf() >>> statement also prints the value -2^31. >>> >>> I'm glad you asked this question because it is very important to >>> understand how quantities are stored in C and how the arithmetic works. >>> >>> Dave >>> >>> On Tuesday, August 21, 2012 11:25:11 AM UTC-5, wladimirufc wrote: >>> >>>> Somebody could explain to me why this happen: >>>> x = (1<<31); >>>> printf("%d\n",x); >>>> if(x<0) x = -x; >>>> printf("%d\n",x); >>>> >>>> Output: >>>> >>>> -2147483648 >>>> -2147483648 >>>> >>>> Wladimir Araujo Tavares >>>> *Federal University of CearĂ¡ <http://lia.ufc.br/%7Ewladimir/> >>>> Homepage <http://lia.ufc.br/%7Ewladimir/> | >>>> Maratona<https://sites.google.com/site/quixadamaratona/>| >>>> * >>>> >>>> >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Algorithm Geeks" group. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msg/algogeeks/-/7a3Wer6PRRQJ. >>> >>> To post to this group, send email to algo...@googlegroups.com<javascript:> >>> . >>> To unsubscribe from this group, send email to >>> algogeeks+...@googlegroups.com <javascript:>. >>> For more options, visit this group at >>> http://groups.google.com/group/algogeeks?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Algorithm Geeks" group. >> To post to this group, send email to algo...@googlegroups.com<javascript:> >> . >> To unsubscribe from this group, send email to >> algogeeks+...@googlegroups.com <javascript:>. >> For more options, visit this group at >> http://groups.google.com/group/algogeeks?hl=en. >> > > -- You received this message because you are subscribed to the Google Groups "Algorithm Geeks" group. To view this discussion on the web visit https://groups.google.com/d/msg/algogeeks/-/wkyMQqvnOnkJ. To post to this group, send email to algogeeks@googlegroups.com. To unsubscribe from this group, send email to algogeeks+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/algogeeks?hl=en.