theory 32 points 3 years ago

Thanks, i hate it

path: 0 344756, hotness: undefined, score: 32, children: 0
0x4E4F 22 points 3 years ago

Takes 1 more character, that's bloat.

path: 0 343370, hotness: undefined, score: 22, children: 4
LaggyKar 25 points 3 years ago

2 more

path: 0 343370 343591, hotness: undefined, score: 25, children: 3
0x4E4F 7 points 3 years ago

Yeah, forgot to count the number. 😁

path: 0 343370 343591 344003, hotness: undefined, score: 7, children: 2
SquishySpaceman 9 points 3 years ago

You forgot to increment your brain's i :P

path: 0 343370 343591 344003 348124, hotness: undefined, score: 9, children: 1
0x4E4F 4 points 3 years 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.

path: 0 343370 343591 344003 348124 358061, hotness: undefined, score: 4, children: 0
mfz 13 points 3 years ago

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

path: 0 345799, hotness: undefined, score: 13, children: 11
maiskanzler 13 points 3 years ago

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🀷

path: 0 345799 353274, hotness: undefined, score: 13, children: 2
Knusper 2 points 3 years ago

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.

path: 0 345799 353274 355242, hotness: undefined, score: 2, children: 1
argv_minus_one 2 points 3 years ago

I love iterators so much.

path: 0 345799 353274 355242 369943, hotness: undefined, score: 2, children: 0
mfz 8 points 3 years 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.

path: 0 345799 353831, hotness: undefined, score: 8, children: 0
Knusper 6 points 3 years ago

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)
path: 0 345799 355002, hotness: undefined, score: 6, children: 2
mfz 10 points 3 years ago

Well, not all languages allow for fun programming :)

path: 0 345799 355002 355209, hotness: undefined, score: 10, children: 1
Knusper 5 points 3 years ago

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

path: 0 345799 355002 355209 355277, hotness: undefined, score: 5, children: 0
Barzaria 5 points 3 years ago

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

path: 0 345799 354780, hotness: undefined, score: 5, children: 1
mfz 5 points 3 years 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.

path: 0 345799 354780 355175, hotness: undefined, score: 5, children: 0
Jamie 2 points 3 years ago

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.

path: 0 345799 372242, hotness: undefined, score: 2, children: 1
mfz 5 points 3 years 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;) { ... }

path: 0 345799 372242 374921, hotness: undefined, score: 5, children: 0
muxelplexer 10 points 3 years ago

this is incredibly cursed. i love it.

path: 0 374758, hotness: undefined, score: 10, children: 0
argv_minus_one 8 points 3 years ago

That won't work if i is unsigned.

path: 0 369953, hotness: undefined, score: 8, children: 4
Jamie 4 points 3 years ago

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.

path: 0 369953 372251, hotness: undefined, score: 4, children: 3
argv_minus_one 2 points 3 years ago

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.

path: 0 369953 372251 373250, hotness: undefined, score: 2, children: 2
barsoap 4 points 3 years 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.

path: 0 369953 372251 373250 373718, hotness: undefined, score: 4, children: 0
ElCrusher 1 point 3 years ago

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

path: 0 369953 372251 373250 509531, hotness: undefined, score: 1, children: 0
limered 7 points 3 years ago

It's beatuful!

path: 0 343115, hotness: undefined, score: 7, children: 0
DictatorGator 5 points 3 years ago

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

path: 0 369590, hotness: undefined, score: 5, children: 0
tunetardis 5 points 3 years 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!

path: 0 484328, hotness: undefined, score: 5, children: 0
blazarious 1 point 3 years ago

Someone forgot to set their phone to do not disturb

path: 0 769719, hotness: undefined, score: 1, children: 0
programmer_humor
programmer_humor

@programming.dev

login for more options
33694
2569
7739

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

  • Keep content in english
  • No advertisements
  • Posts must be related to programming or programmer topics
    • If the mod doesn't find it funny, you're banned. Ha-ha!... For real: do not use the community for "statements". There are other places for such content. Keep it chill and funny.

go to feed...