Signed and unsigned integers with logical operators
int x = /* some integer */;
unsigned int ux = (unsigned) x;
we have
x >= 0 || x < ux
we know that in x < ux
the first x
is cast implicitly to unsigned
but is the first x
in x >= 0
(1) cast to unsigned
implicitly?
c casting operators
add a comment |
int x = /* some integer */;
unsigned int ux = (unsigned) x;
we have
x >= 0 || x < ux
we know that in x < ux
the first x
is cast implicitly to unsigned
but is the first x
in x >= 0
(1) cast to unsigned
implicitly?
c casting operators
Detail:x
is not cast - there is no cast inx < ux
.x
is converted to anunsigned
.
– chux
Jan 2 at 22:09
add a comment |
int x = /* some integer */;
unsigned int ux = (unsigned) x;
we have
x >= 0 || x < ux
we know that in x < ux
the first x
is cast implicitly to unsigned
but is the first x
in x >= 0
(1) cast to unsigned
implicitly?
c casting operators
int x = /* some integer */;
unsigned int ux = (unsigned) x;
we have
x >= 0 || x < ux
we know that in x < ux
the first x
is cast implicitly to unsigned
but is the first x
in x >= 0
(1) cast to unsigned
implicitly?
c casting operators
c casting operators
edited Jan 2 at 18:33
bolov
33.3k877141
33.3k877141
asked Jan 2 at 18:29
durnovvdurnovv
546
546
Detail:x
is not cast - there is no cast inx < ux
.x
is converted to anunsigned
.
– chux
Jan 2 at 22:09
add a comment |
Detail:x
is not cast - there is no cast inx < ux
.x
is converted to anunsigned
.
– chux
Jan 2 at 22:09
Detail:
x
is not cast - there is no cast in x < ux
. x
is converted to an unsigned
.– chux
Jan 2 at 22:09
Detail:
x
is not cast - there is no cast in x < ux
. x
is converted to an unsigned
.– chux
Jan 2 at 22:09
add a comment |
3 Answers
3
active
oldest
votes
No. It happens operator by operator.
x >= 0 || x < ux
is naturally
(x >= 0) || (x < ux)
Since x
and 0
are both int
s, there is no need for any (usual arithmetic) conversions...
And even though x
is converted to unsigned in x < ux
, the value of the expression x < ux
is of type int
- either 0
or 1
(just like on the the left-hand side).
add a comment |
No it isn’t.
This is because x >= 0 is an expression. (Formally 0 is an octal constant of type int.)
Try 1 / 2 * 1.0 for a more pernicious example. This is grouped as (1 / 2) * 1.0 and is zero since the integers in the expression 1 / 2 are not promoted to floating point.
Thanks, makes sense
– durnovv
Jan 2 at 18:35
@durnovv It’s a good question though!
– Bathsheba
Jan 2 at 18:35
add a comment |
No, 0
is an int
, so there are no promotions in the x >= 0
part of your expression.
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%2f54011382%2fsigned-and-unsigned-integers-with-logical-operators%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
No. It happens operator by operator.
x >= 0 || x < ux
is naturally
(x >= 0) || (x < ux)
Since x
and 0
are both int
s, there is no need for any (usual arithmetic) conversions...
And even though x
is converted to unsigned in x < ux
, the value of the expression x < ux
is of type int
- either 0
or 1
(just like on the the left-hand side).
add a comment |
No. It happens operator by operator.
x >= 0 || x < ux
is naturally
(x >= 0) || (x < ux)
Since x
and 0
are both int
s, there is no need for any (usual arithmetic) conversions...
And even though x
is converted to unsigned in x < ux
, the value of the expression x < ux
is of type int
- either 0
or 1
(just like on the the left-hand side).
add a comment |
No. It happens operator by operator.
x >= 0 || x < ux
is naturally
(x >= 0) || (x < ux)
Since x
and 0
are both int
s, there is no need for any (usual arithmetic) conversions...
And even though x
is converted to unsigned in x < ux
, the value of the expression x < ux
is of type int
- either 0
or 1
(just like on the the left-hand side).
No. It happens operator by operator.
x >= 0 || x < ux
is naturally
(x >= 0) || (x < ux)
Since x
and 0
are both int
s, there is no need for any (usual arithmetic) conversions...
And even though x
is converted to unsigned in x < ux
, the value of the expression x < ux
is of type int
- either 0
or 1
(just like on the the left-hand side).
edited Jan 2 at 19:59
answered Jan 2 at 18:32
Antti HaapalaAntti Haapala
85.5k16162204
85.5k16162204
add a comment |
add a comment |
No it isn’t.
This is because x >= 0 is an expression. (Formally 0 is an octal constant of type int.)
Try 1 / 2 * 1.0 for a more pernicious example. This is grouped as (1 / 2) * 1.0 and is zero since the integers in the expression 1 / 2 are not promoted to floating point.
Thanks, makes sense
– durnovv
Jan 2 at 18:35
@durnovv It’s a good question though!
– Bathsheba
Jan 2 at 18:35
add a comment |
No it isn’t.
This is because x >= 0 is an expression. (Formally 0 is an octal constant of type int.)
Try 1 / 2 * 1.0 for a more pernicious example. This is grouped as (1 / 2) * 1.0 and is zero since the integers in the expression 1 / 2 are not promoted to floating point.
Thanks, makes sense
– durnovv
Jan 2 at 18:35
@durnovv It’s a good question though!
– Bathsheba
Jan 2 at 18:35
add a comment |
No it isn’t.
This is because x >= 0 is an expression. (Formally 0 is an octal constant of type int.)
Try 1 / 2 * 1.0 for a more pernicious example. This is grouped as (1 / 2) * 1.0 and is zero since the integers in the expression 1 / 2 are not promoted to floating point.
No it isn’t.
This is because x >= 0 is an expression. (Formally 0 is an octal constant of type int.)
Try 1 / 2 * 1.0 for a more pernicious example. This is grouped as (1 / 2) * 1.0 and is zero since the integers in the expression 1 / 2 are not promoted to floating point.
edited Jan 2 at 18:35
answered Jan 2 at 18:33


BathshebaBathsheba
181k27256384
181k27256384
Thanks, makes sense
– durnovv
Jan 2 at 18:35
@durnovv It’s a good question though!
– Bathsheba
Jan 2 at 18:35
add a comment |
Thanks, makes sense
– durnovv
Jan 2 at 18:35
@durnovv It’s a good question though!
– Bathsheba
Jan 2 at 18:35
Thanks, makes sense
– durnovv
Jan 2 at 18:35
Thanks, makes sense
– durnovv
Jan 2 at 18:35
@durnovv It’s a good question though!
– Bathsheba
Jan 2 at 18:35
@durnovv It’s a good question though!
– Bathsheba
Jan 2 at 18:35
add a comment |
No, 0
is an int
, so there are no promotions in the x >= 0
part of your expression.
add a comment |
No, 0
is an int
, so there are no promotions in the x >= 0
part of your expression.
add a comment |
No, 0
is an int
, so there are no promotions in the x >= 0
part of your expression.
No, 0
is an int
, so there are no promotions in the x >= 0
part of your expression.
answered Jan 2 at 18:32
Carl NorumCarl Norum
177k22347424
177k22347424
add a comment |
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%2f54011382%2fsigned-and-unsigned-integers-with-logical-operators%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
Detail:
x
is not cast - there is no cast inx < ux
.x
is converted to anunsigned
.– chux
Jan 2 at 22:09