Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between (size_t)-1 and ~0?

I've seen both (size_t)-1 and ~0 used to represent large numbers, or numbers with all their bits flipped.

Is there any difference between the two? If so, what is it?

I found this question: What is the difference between -1 and ~0, however it did not answer my question because I'm dealing with unsigned integers (such as size_t), as opposed to signed integers (such as int).

like image 688
S.S. Anne Avatar asked Apr 14 '19 18:04

S.S. Anne


People also ask

Can a Size_t be negative?

The size_t data type is never negative.

What is difference between size Size_t?

The type's size is chosen so that it could store the maximum size of a theoretically possible array of any type. On a 32-bit system size_t will take 32 bits, on a 64- bit one 64 bits. In other words, a variable of size_t type can safely store a pointer.

How is Size_t defined?

size_t is the unsigned integer type of the result of sizeof , _Alignof (since C11) and offsetof, depending on the data model. The bit width of size_t is not less than 16.

Can Size_t be compared to int?

It is okay to compare a size_t value with an int value, the int value will be implicitly converted to unsigned type. Some compilers will issue a warning when you mix signed and unsigned types in comparisons.

What is difference between int and size_t in C++?

In C++, int is considered the basic signed integer type. It’s understood that int will be at least 16 bits wide. On the other hand, size_t is considered an unsigned integer featuring enough bytes to accommodate any size type.

Can size_t be negative in C?

The size_t data type is never negative. Therefore many C library functions like malloc, memcpy and strlen declare their arguments and return type as size_t. For instance, size_t or any unsigned type might be seen used as loop variable as loop variables are typically greater than or equal to 0.

Is size 4 the same as 5T?

No, size 4 is not the same as 5T. It is a size smaller than 5T. 5T will be longer and broader than size 4 and can accommodate a diaper. The bottom of size 4 will not be big enough to accommodate a diaper. Thus, only a fully potty trained toddler can use size 4. If your child is not potty trained or has a bigger build, you should opt for 5T.

What is the difference between size_t and array size?

An array is also declared with the size x. size_t is a datatype of unsigned integral variable x. It is calculating the size of variable a in bytes. printf ("SIZE_MAX = %lu ", SIZE_MAX); size_t size = sizeof (a);


3 Answers

What's the difference between (size_t)-1 and ~0?

Type and value differ.

(size_t)-1 is the same value as SIZE_MAX and has a type of size_t.

~0 is often -1 and has the type of int.


Assigning both of those to a size_t will result in SIZE_MAX.

size_t a = (size_t)-1; 
size_t b = ~0;

In the 2nd case, -1 is assigned to a b and undergoes a conversion first, wrapping around the -1 to the maximum size_t value.

like image 161
chux - Reinstate Monica Avatar answered Nov 19 '22 14:11

chux - Reinstate Monica


(size_t)-1 is of type size_t. It typically has a value of 232-1 or 264-1 (4294967295 or 18446744073709551615).

~0 is of type int, and has the value -1 on a 2's-complement system (i.e., just about everywhere).

Both are likely to have the same bit pattern -- if int and size_t are the same size, which they very commonly are not.

If you want the maximum value of type size_t, you can use the SIZE_MAX macro, defined in <stdint.h>. If you're using an older implementation (pre-C99) that doesn't provide SIZE_MAX, (size_t)-1 will work. I'm not sure why you'd want to write ~0 rather than -1 -- unless perhaps you're considering non-two's-complement systems.

like image 21
Keith Thompson Avatar answered Nov 19 '22 12:11

Keith Thompson


Note that the previous answers assume a 2's complement machine (very likely to be the case these days, but not guaranteed).

If you had a sign-magnitude machine then -1 would have a sign bit and least significant bit set with all others clear, if you had a 1's complement machine then -1 would have all bits but the LSB set.

In all of these cases (including the common 2's complement machine), ~0 has all bits set.

like image 39
SoronelHaetir Avatar answered Nov 19 '22 13:11

SoronelHaetir