size_t
?Before we go into the topic, size_t
is a embedded type definition in C asunsigned int
which is a result type of sizeof()
function. which means, it cannot be smaller than 0 value. Once it is about to hit negative value by calculation, every bit is filped over to 1.
This is my personal experience when I code a small game with C.
What I thought for size_t
is a simple and ideal type to break negative loop as it cannot reach to negative value. with this naivety, I just safely thought that once i
hit negative value by --
calculation, the operation is automatically stopped by program.
size_t i;
for (i = 5; i >= 0; --i) {
printf("%d\n", i);
}
breaking down to the code, what result would you expect?
>> 5
>> 4
>> 3
>> 2
>> 1
>> 0
if you thought in this way, we are on the same ground.
the actual result is going as follow
>> 5
>> 4
>> 3
>> 2
>> 1
>> 0
>> -1
>> -2
>> -3
>> -4
...
...
size_t
is represented as unsigned int
type.
size_t i = 0;
i -= 1; [1]
printf("%d\n", i >= 0); [2]
when the program subract 1 from 0, binary bits are filped over to the max value of unsigned int
(which is 4294967295)
we call this phenomenon as underflow
this is the difference between 0 and -1 in
unsigned int
- when
size_t i
is0
0000 0000 0000 0000 0000 0000 0000 0000(2)- when
size_t i
is-1
1111 1111 1111 1111 1111 1111 1111 1111(2)
now let me back to the negative for loop
size_t i;
for (i = 5; i >= 0; --i) {
printf("%d\n", i);
}
i
is evaluated every round by for
statement and this is how it works
when i = 5, 5 >= 0 is TRUE(1)
when i = 4, 4 >= 0 is TRUE(1)
when i = 3, 3 >= 0 is TRUE(1)
when i = 2, 2 >= 0 is TRUE(1)
when i = 1, 1 >= 0 is TRUE(1)
when i = 0, 0 >= 0 is TRUE(1)
when i = -1, 4294967295 >= 0 is TRUE(1)
when i = -2, 4294967294 >= 0 is TRUE(1)
when i = -3, 4294967293 >= 0 is TRUE(1)
when i = -4, 4294967292 >= 0 is TRUE(1)
...
...
as size_t
is alway evaluated as positive, program cannot get out of the loop and will be infinitely repeated.
Therefore, if you want to set break condition in negative loop, int
is right type for this
This isn't your casual swipe-to-win affair; geometry dash lite's a rhythmic gauntlet of neon squares and spiky demons, a one-tap odyssey through a world where precision meets pixelated pain.