What's the difference between (size_t)-1 and ~0? Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) The Ask Question Wizard is Live! Data science time! April 2019 and salary with experienceWhat is the difference between -1 and ~0What is the difference between #include <filename> and #include “filename”?Signed versus Unsigned IntegersWhy doesn't C have unsigned floats?What is the difference between const int*, const int * const, and int const *?size_t vs. uintptr_tDifference between malloc and calloc?Improve INSERT-per-second performance of SQLite?Difference between signed / unsigned charshould use size_t or ssize_tWhy is unsigned integer overflow defined behavior but signed integer overflow isn't?
What items from the Roman-age tech-level could be used to deter all creatures from entering a small area?
If I can make up priors, why can't I make up posteriors?
What would be Julian Assange's expected punishment, on the current English criminal law?
How to rotate it perfectly?
What computer would be fastest for Mathematica Home Edition?
Why don't the Weasley twins use magic outside of school if the Trace can only find the location of spells cast?
Do working physicists consider Newtonian mechanics to be "falsified"?
The following signatures were invalid: EXPKEYSIG 1397BC53640DB551
Active filter with series inductor and resistor - do these exist?
What to do with post with dry rot?
How to dynamically generate the hash value of a file while it gets downloaded from any website?
Writing Thesis: Copying from published papers
Array/tabular for long multiplication
Can't figure this one out.. What is the missing box?
Communication vs. Technical skills ,which is more relevant for today's QA engineer positions?
Need a suitable toxic chemical for a murder plot in my novel
Are my PIs rude or am I just being too sensitive?
What's the point in a preamp?
What was the last x86 CPU that did not have the x87 floating-point unit built in?
How is simplicity better than precision and clarity in prose?
What did Darwin mean by 'squib' here?
When communicating altitude with a '9' in it, should it be pronounced "nine hundred" or "niner hundred"?
When is phishing education going too far?
Limit for e and 1/e
What's the difference between (size_t)-1 and ~0?
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
The Ask Question Wizard is Live!
Data science time! April 2019 and salary with experienceWhat is the difference between -1 and ~0What is the difference between #include <filename> and #include “filename”?Signed versus Unsigned IntegersWhy doesn't C have unsigned floats?What is the difference between const int*, const int * const, and int const *?size_t vs. uintptr_tDifference between malloc and calloc?Improve INSERT-per-second performance of SQLite?Difference between signed / unsigned charshould use size_t or ssize_tWhy is unsigned integer overflow defined behavior but signed integer overflow isn't?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
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).
c unsigned ones-complement
add a comment |
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).
c unsigned ones-complement
Note that~0is a signed quantity — you'd need~0Uto make it unsigned.
– Jonathan Leffler
3 hours ago
Should I edit that?
– JL2210
3 hours ago
3
Since you've got some answers which addresses~0rather than~0U, best to leave it unchanged, I think, but note for the future that it is a good idea to be careful. You can change a question up until making the change would invalidate answers.
– Jonathan Leffler
2 hours ago
add a comment |
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).
c unsigned ones-complement
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).
c unsigned ones-complement
c unsigned ones-complement
asked 3 hours ago
JL2210JL2210
622121
622121
Note that~0is a signed quantity — you'd need~0Uto make it unsigned.
– Jonathan Leffler
3 hours ago
Should I edit that?
– JL2210
3 hours ago
3
Since you've got some answers which addresses~0rather than~0U, best to leave it unchanged, I think, but note for the future that it is a good idea to be careful. You can change a question up until making the change would invalidate answers.
– Jonathan Leffler
2 hours ago
add a comment |
Note that~0is a signed quantity — you'd need~0Uto make it unsigned.
– Jonathan Leffler
3 hours ago
Should I edit that?
– JL2210
3 hours ago
3
Since you've got some answers which addresses~0rather than~0U, best to leave it unchanged, I think, but note for the future that it is a good idea to be careful. You can change a question up until making the change would invalidate answers.
– Jonathan Leffler
2 hours ago
Note that
~0 is a signed quantity — you'd need ~0U to make it unsigned.– Jonathan Leffler
3 hours ago
Note that
~0 is a signed quantity — you'd need ~0U to make it unsigned.– Jonathan Leffler
3 hours ago
Should I edit that?
– JL2210
3 hours ago
Should I edit that?
– JL2210
3 hours ago
3
3
Since you've got some answers which addresses
~0 rather than ~0U, best to leave it unchanged, I think, but note for the future that it is a good idea to be careful. You can change a question up until making the change would invalidate answers.– Jonathan Leffler
2 hours ago
Since you've got some answers which addresses
~0 rather than ~0U, best to leave it unchanged, I think, but note for the future that it is a good idea to be careful. You can change a question up until making the change would invalidate answers.– Jonathan Leffler
2 hours ago
add a comment |
3 Answers
3
active
oldest
votes
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.
Comments are not for extended discussion; this conversation has been moved to chat.
– Bhargav Rao♦
2 hours ago
add a comment |
(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.
Thanks for letting me know. I'll remember to defineSIZE_MAXin mystdint.himplementation.
– JL2210
3 hours ago
Re;~0versus-1- some compilers warn on implicit wrapping in constant expressions.
– TLW
20 mins ago
add a comment |
Note that the previous answers assume a 2s 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 1s complement machine then -1 would have all bits but the LSB set.
In all of these cases (including the common 2s complement machine) ~0 has all bits set.
Note that in the question I'm asking about unsigned integers, so there's no such thing as a "sign bit".
– JL2210
1 hour ago
2
@JL2210 - note that the intermediate values of both~0and-1are signed, not unsigned.
– TLW
21 mins ago
Ah. I understand now. I'll upvote as soon as this is edited.
– JL2210
51 secs ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55678835%2fwhats-the-difference-between-size-t-1-and-0%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
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.
Comments are not for extended discussion; this conversation has been moved to chat.
– Bhargav Rao♦
2 hours ago
add a comment |
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.
Comments are not for extended discussion; this conversation has been moved to chat.
– Bhargav Rao♦
2 hours ago
add a comment |
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.
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.
edited 2 hours ago
answered 3 hours ago
chuxchux
85.3k874157
85.3k874157
Comments are not for extended discussion; this conversation has been moved to chat.
– Bhargav Rao♦
2 hours ago
add a comment |
Comments are not for extended discussion; this conversation has been moved to chat.
– Bhargav Rao♦
2 hours ago
Comments are not for extended discussion; this conversation has been moved to chat.
– Bhargav Rao♦
2 hours ago
Comments are not for extended discussion; this conversation has been moved to chat.
– Bhargav Rao♦
2 hours ago
add a comment |
(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.
Thanks for letting me know. I'll remember to defineSIZE_MAXin mystdint.himplementation.
– JL2210
3 hours ago
Re;~0versus-1- some compilers warn on implicit wrapping in constant expressions.
– TLW
20 mins ago
add a comment |
(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.
Thanks for letting me know. I'll remember to defineSIZE_MAXin mystdint.himplementation.
– JL2210
3 hours ago
Re;~0versus-1- some compilers warn on implicit wrapping in constant expressions.
– TLW
20 mins ago
add a comment |
(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.
(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.
edited 3 hours ago
Jonathan Leffler
575k956881041
575k956881041
answered 3 hours ago
Keith ThompsonKeith Thompson
195k26290484
195k26290484
Thanks for letting me know. I'll remember to defineSIZE_MAXin mystdint.himplementation.
– JL2210
3 hours ago
Re;~0versus-1- some compilers warn on implicit wrapping in constant expressions.
– TLW
20 mins ago
add a comment |
Thanks for letting me know. I'll remember to defineSIZE_MAXin mystdint.himplementation.
– JL2210
3 hours ago
Re;~0versus-1- some compilers warn on implicit wrapping in constant expressions.
– TLW
20 mins ago
Thanks for letting me know. I'll remember to define
SIZE_MAX in my stdint.h implementation.– JL2210
3 hours ago
Thanks for letting me know. I'll remember to define
SIZE_MAX in my stdint.h implementation.– JL2210
3 hours ago
Re;
~0 versus -1 - some compilers warn on implicit wrapping in constant expressions.– TLW
20 mins ago
Re;
~0 versus -1 - some compilers warn on implicit wrapping in constant expressions.– TLW
20 mins ago
add a comment |
Note that the previous answers assume a 2s 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 1s complement machine then -1 would have all bits but the LSB set.
In all of these cases (including the common 2s complement machine) ~0 has all bits set.
Note that in the question I'm asking about unsigned integers, so there's no such thing as a "sign bit".
– JL2210
1 hour ago
2
@JL2210 - note that the intermediate values of both~0and-1are signed, not unsigned.
– TLW
21 mins ago
Ah. I understand now. I'll upvote as soon as this is edited.
– JL2210
51 secs ago
add a comment |
Note that the previous answers assume a 2s 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 1s complement machine then -1 would have all bits but the LSB set.
In all of these cases (including the common 2s complement machine) ~0 has all bits set.
Note that in the question I'm asking about unsigned integers, so there's no such thing as a "sign bit".
– JL2210
1 hour ago
2
@JL2210 - note that the intermediate values of both~0and-1are signed, not unsigned.
– TLW
21 mins ago
Ah. I understand now. I'll upvote as soon as this is edited.
– JL2210
51 secs ago
add a comment |
Note that the previous answers assume a 2s 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 1s complement machine then -1 would have all bits but the LSB set.
In all of these cases (including the common 2s complement machine) ~0 has all bits set.
Note that the previous answers assume a 2s 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 1s complement machine then -1 would have all bits but the LSB set.
In all of these cases (including the common 2s complement machine) ~0 has all bits set.
answered 1 hour ago
SoronelHaetirSoronelHaetir
7,1711514
7,1711514
Note that in the question I'm asking about unsigned integers, so there's no such thing as a "sign bit".
– JL2210
1 hour ago
2
@JL2210 - note that the intermediate values of both~0and-1are signed, not unsigned.
– TLW
21 mins ago
Ah. I understand now. I'll upvote as soon as this is edited.
– JL2210
51 secs ago
add a comment |
Note that in the question I'm asking about unsigned integers, so there's no such thing as a "sign bit".
– JL2210
1 hour ago
2
@JL2210 - note that the intermediate values of both~0and-1are signed, not unsigned.
– TLW
21 mins ago
Ah. I understand now. I'll upvote as soon as this is edited.
– JL2210
51 secs ago
Note that in the question I'm asking about unsigned integers, so there's no such thing as a "sign bit".
– JL2210
1 hour ago
Note that in the question I'm asking about unsigned integers, so there's no such thing as a "sign bit".
– JL2210
1 hour ago
2
2
@JL2210 - note that the intermediate values of both
~0 and -1 are signed, not unsigned.– TLW
21 mins ago
@JL2210 - note that the intermediate values of both
~0 and -1 are signed, not unsigned.– TLW
21 mins ago
Ah. I understand now. I'll upvote as soon as this is edited.
– JL2210
51 secs ago
Ah. I understand now. I'll upvote as soon as this is edited.
– JL2210
51 secs ago
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55678835%2fwhats-the-difference-between-size-t-1-and-0%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Note that
~0is a signed quantity — you'd need~0Uto make it unsigned.– Jonathan Leffler
3 hours ago
Should I edit that?
– JL2210
3 hours ago
3
Since you've got some answers which addresses
~0rather than~0U, best to leave it unchanged, I think, but note for the future that it is a good idea to be careful. You can change a question up until making the change would invalidate answers.– Jonathan Leffler
2 hours ago