this post was submitted on 19 Jun 2023
304 points (99.4% liked)

Programmer Humor

19471 readers
1587 users here now

Welcome to Programmer Humor!

This is a place where you can post jokes, memes, humor, etc. related to programming!

For sharing awful code theres also Programming Horror.

Rules

founded 1 year ago
MODERATORS
 
top 28 comments
sorted by: hot top controversial new old
[–] [email protected] 24 points 1 year ago

Thanks, i hate it

[–] [email protected] 14 points 1 year ago (1 children)

Takes 1 more character, that's bloat.

[–] [email protected] 17 points 1 year ago (1 children)
[–] [email protected] 5 points 1 year ago (1 children)

Yeah, forgot to count the number. 😁

[–] [email protected] 7 points 1 year ago (1 children)

You forgot to increment your brain's i :P

[–] [email protected] 4 points 1 year ago* (last edited 1 year ago)

You can imagine me debuging and going "huh 🤨, I wrote this, what the hell was I thinking 🤦"... it's no fun actually, you rewrite stuff all the time 🤷. It's like my brain goes 🥳 for about 10 minutes or so and just does random stupid things.

[–] [email protected] 9 points 1 year ago* (last edited 1 year ago) (5 children)

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

[–] [email protected] 11 points 1 year ago (1 children)

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🤷

[–] [email protected] 0 points 1 year ago (1 children)

They're especially also a source of bugs, because they encourage manually incrementing indices and manually accessing array positions, which is almost never actually sensible.

[–] [email protected] 2 points 1 year ago

I love iterators so much.

[–] [email protected] 6 points 1 year ago* (last edited 1 year ago)

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.

[–] [email protected] 5 points 1 year ago (1 children)

In the languages I know, i-=-1 or x=3 are not expressions, but rather statements, so they do not evaluate to a value.

So, this would be a compiler error:

a = (x=3)
[–] [email protected] 8 points 1 year ago (1 children)

Well, not all languages allow for fun programming :)

[–] [email protected] 4 points 1 year ago

Sounds like the opposite of fun to me, to have those as expressions...

[–] [email protected] 3 points 1 year ago (1 children)

Please explain in less detail to help me understand, internet friend.

[–] [email protected] 4 points 1 year ago

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.

[–] [email protected] 2 points 1 year ago (1 children)

I gave it a shot in Compiler Explorer, with the following code:

#include <stdio.h>

int main() {
  for (int i = 0; i < 10; i -= -1) {
    printf("%d", i);
  }
}

GCC takes the i-=-1 and optimizes it into ADD DWARD PTR [rbp-4], 1, and changing it around to ++i or i++ makes no difference.

So, at least in C and C++, it works all the same. Even on unsigned integers.

[–] [email protected] 2 points 1 year ago

It works the same because the value of the last expression in the for loop is not used for anything. It's the side effect of that statement that counts. Eg, the value of i is checked the next time the for loop is executed by the condition check. Try replacing i in the condition check instead with i++ or ++i and you would see different results.

Something like: for (int i = 0; ++i < 10;) { ... }

[–] [email protected] 9 points 1 year ago

this is incredibly cursed. i love it.

[–] [email protected] 6 points 1 year ago

I came here to laugh at the no at the end 🤣🤣

[–] [email protected] 6 points 1 year ago (1 children)

That won't work if i is unsigned.

[–] [email protected] 4 points 1 year ago (1 children)

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.

[–] [email protected] 2 points 1 year ago* (last edited 1 year ago) (2 children)

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.

[–] [email protected] 3 points 1 year ago

That stuff working is pretty much the point of two's complement: You can use the same circuitry for addition and subtraction that's why everyone settled on it.

[–] [email protected] 1 points 1 year ago

Hey, thanks for that explanation! I didn't understand what was going on and that clarified it.

[–] [email protected] 5 points 1 year ago

It's beatuful!

[–] [email protected] 5 points 1 year ago

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!

[–] [email protected] 1 points 1 year ago

Someone forgot to set their phone to do not disturb

load more comments
view more: next ›