i++
i++
i++
Isn't the evaluated value different from the expression? i++
returns the value of i before increasing. i-=-1
would return the value after it has been increased. Wouldn't it be more correct to make it equal to ++i
And that's why post- and pre-increment is non-existant in Python and Rust. It's an easy source for bugs for a noncritical abbreviationπ€·
Please explain in less detail to help me understand, internet friend.
In C you can group expressions within (
and )
separated with ,
. Expressions are evaluated in order and the last expression in the group is the returned value of the group.
If you're hell bend on achieving the goodness of i++
equivalent you could wrap it up like this:
(i-=-1,i-1)
We're talking C here of course.
this is incredibly cursed. i love it.
I saw while(i --> 0)
in someone else's code and thought wth is this -->
operator? Then I realized it's while(i-- > 0)
and thought cool, I gotta do this!
That won't work if i
is unsigned.
If you're in a language that doesn't care about integer overflow it does. Tried it in C and turned off compiler optimization for good measure. Still counted fine. It's not a good idea, but it does work.
Huh. I had to think about it for a moment, but you're right. If the two's-complement representation of -1 is reinterpreted as an unsigned integer and added to another unsigned integer of the same size, it'll wrap all the way around, effectively adding -1.
It's an interesting property of two's complement that you don't usually think about when you're using a strongly-typed language where such shenanigans aren't allowed. I imagine compiler and assembly people are well aware of it, though.
For anyone following along and wondering how this works, here's a quick explanation. Suppose you've got a device that can calculate the sum of any two integers between 0 and 99. If it calculates a sum greater than 99, it wraps around. For example, if you tell it to calculate 99 + 1, you get 0.
Now, suppose you want to add negative integers with this thing. You'll pretend that 99 actually means -1, 98 actually means -2, and so on, for every number between 50 and 99. 0 through 49 will represent positive numbers, and 50 through 99 will represent negative numbers.
So, what if you add 5 and -1? Well, 5 is itself, -1 is 99, and the device wraps around when it calculates a sum greater than 99, so if you add 5 and 99, you getβ¦4! It correctly adds your pretend negative numbers without you having to do anything extra.
This is pretty much the same as how computers work, except binary instead of decimal.
I came here to laugh at the no at the end π€£π€£
Someone forgot to set their phone to do not disturb
It's beatuful!
Thanks, i hate it