Programming Lesson of the Day
-
Programming Lesson of the Day #2: If you'd used C# it wouldn't have compiled ... :laugh:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
Programming Lesson of the Day #3: Check your assumptions before posting them as a lesson! ;P
bool x = true;
bool y = false;
(x & y).Dump(); // Output: FalseIt's not commonly used, but for booleans,
&
is the non-short-circuiting version of&&
. It's the C# equivalent of VB.NET'sAnd
, whereas&&
equates toAndAlso
.Binary & operators are predefined for the integral types and bool. ... For bool operands, & computes the logical AND of its operands; that is, the result is true if and only if both its operands are true. The & operator evaluates both operators regardless of the first one's value.
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
Programming Lesson of the Day #3: Check your assumptions before posting them as a lesson! ;P
bool x = true;
bool y = false;
(x & y).Dump(); // Output: FalseIt's not commonly used, but for booleans,
&
is the non-short-circuiting version of&&
. It's the C# equivalent of VB.NET'sAnd
, whereas&&
equates toAndAlso
.Binary & operators are predefined for the integral types and bool. ... For bool operands, & computes the logical AND of its operands; that is, the result is true if and only if both its operands are true. The & operator evaluates both operators regardless of the first one's value.
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
And I've learned something today! Thank you - I didn't know that. :thumbsup:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
Programming Lesson of the Day #2: If you'd used C# it wouldn't have compiled ... :laugh:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
I needed the binary AND (was checking a flag register from a custom device) so it would have been a real issue if it did not compile ;P
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"
-
X & Y
is not the same as
X && Y
Twenty minutes wasted on a condition who refused to yield the correct result.
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"
Details! Details!
#SupportHeForShe Government can give you nothing but what it takes from somebody else. A government big enough to give you everything you want is big enough to take everything you've got, including your freedom.-Ezra Taft Benson You must accept 1 of 2 basic premises: Either we are alone in the universe or we are not alone. Either way, the implications are staggering!-Wernher von Braun
-
And I've learned something today! Thank you - I didn't know that. :thumbsup:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
All of @OriginalGriff 's Today points should be assigned to @RichardDeeming... ;P
-
All of @OriginalGriff 's Today points should be assigned to @RichardDeeming... ;P
Why limit it to today? :-\
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
-
Programming Lesson of the Day #2: If you'd used C# it wouldn't have compiled ... :laugh:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
X & Y
is not the same as
X && Y
Twenty minutes wasted on a condition who refused to yield the correct result.
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"
den2k88 wrote:
refused to yield the correct expected result.
FTFY
-
And I've learned something today! Thank you - I didn't know that. :thumbsup:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
Just to expand on Richard's point... I'm more of a C guy than C#, but like with C/C++ I can only assume that in this case, the compiler is doing a binary operation of AND, and 1 (or any non-zero) AND 0 is always going to be zero, which is expressed as false in this case. It's the difference between a bitwise operator and a logical one.
Jeremy Falcon
-
Why limit it to today? :-\
"These people looked deep within my soul and assigned me a number based on the order in which I joined." - Homer
Because we don't want him to stop posting his thoughts of the day... we need this... our precious. :~
Jeremy Falcon
-
Just to expand on Richard's point... I'm more of a C guy than C#, but like with C/C++ I can only assume that in this case, the compiler is doing a binary operation of AND, and 1 (or any non-zero) AND 0 is always going to be zero, which is expressed as false in this case. It's the difference between a bitwise operator and a logical one.
Jeremy Falcon
That's why C# didn't adopt the C convention that any non-zero value is true: you can't treat an integer as a boolean directly. Hence why I assumed that the compiler would complain, it does with
if (myInt = 6)
...because an integer isn't a boolean value
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
That's why C# didn't adopt the C convention that any non-zero value is true: you can't treat an integer as a boolean directly. Hence why I assumed that the compiler would complain, it does with
if (myInt = 6)
...because an integer isn't a boolean value
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
Oh I hear ya man. I reckon the difference being the compiler knows that's an assignment operator. My understanding of the way C# and Java does things is to create an object where needed from literals / constants / expressions. So, it would be more like this...
"Hello, world!".ToUpper()
...just instead of a string it's a false... which gets treated like a boolean.
Jeremy Falcon
-
That's why C# didn't adopt the C convention that any non-zero value is true: you can't treat an integer as a boolean directly. Hence why I assumed that the compiler would complain, it does with
if (myInt = 6)
...because an integer isn't a boolean value
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
the integer is not a boolean, but the "success" of the value assignment can be taken as a bool I have had problems with that several times in my career. That's why I got used to put constants in first place. if (6 = myInt) is going to throw an error in many more cases as the other possibility.
M.D.V. ;) If something has a solution... Why do we have to worry about?. If it has no solution... For what reason do we have to worry about? Help me to understand what I'm saying, and I'll explain it better to you Rating helpful answers is nice, but saying thanks can be even nicer.
-
Oh I hear ya man. I reckon the difference being the compiler knows that's an assignment operator. My understanding of the way C# and Java does things is to create an object where needed from literals / constants / expressions. So, it would be more like this...
"Hello, world!".ToUpper()
...just instead of a string it's a false... which gets treated like a boolean.
Jeremy Falcon
Jeremy Falcon wrote:
I reckon the difference being the compiler knows that's an assignment operator.
Nope, it's because both C# and Java are more type safe (strong typed) than C is. In this case they define a boolean type, C just interprets an integer to have similar "meaning" to a boolean. And the if statement (in C#/Java) requires a boolean input argument. It's the same sort of situation as sending a string into a function which expected a float - compiler error - wrong type. This is an example of where C uses a weak typing system. It generally just uses the raw data as if it's in the expected type. Effectively turning it into a raw type-cast. The more strongly typed languages disallow most of these, probably because they tend to be the reason behind lots of bugs (if not most).
-
X & Y
is not the same as
X && Y
Twenty minutes wasted on a condition who refused to yield the correct result.
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"
Actually, the result is the same. The side-effects aren't. At least in C#. In C, with it's enforced type-unsafety, the result can be extremey weird and the compiler won't do jack to even warn you.
-
Jeremy Falcon wrote:
I reckon the difference being the compiler knows that's an assignment operator.
Nope, it's because both C# and Java are more type safe (strong typed) than C is. In this case they define a boolean type, C just interprets an integer to have similar "meaning" to a boolean. And the if statement (in C#/Java) requires a boolean input argument. It's the same sort of situation as sending a string into a function which expected a float - compiler error - wrong type. This is an example of where C uses a weak typing system. It generally just uses the raw data as if it's in the expected type. Effectively turning it into a raw type-cast. The more strongly typed languages disallow most of these, probably because they tend to be the reason behind lots of bugs (if not most).
:thumbsup:
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
den2k88 wrote:
refused to yield the correct expected result.
FTFY
"If I put in wrong data, will the result be correct?"
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"
-
Actually, the result is the same. The side-effects aren't. At least in C#. In C, with it's enforced type-unsafety, the result can be extremey weird and the compiler won't do jack to even warn you.
No. Example 2 & 4 is 0 2 && is 1 (true) In that case I needed the first form as I was checking for a flag in a flag register, but mistakenly used the second form due to, well, being the most common (althought not so much in my field, which requires the management of a lot of driverless hardware).
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"
-
Depending on the correct implementation of the "&" and "&&" operators in a fat class it shouldnt be the same :rolleyes:
Press F1 for help or google it. Greetings from Germany
Plain C operators - it was a stupid mistake from my part, on the same day I made at least 3 mistakes of >= vs >. It wasn just the day - in fact I'm on sick leave today due to a strong headache I've been coddling since yesterday evening. Probably I was starting to feel it's effects in the morning too :D
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"
-
Just to expand on Richard's point... I'm more of a C guy than C#, but like with C/C++ I can only assume that in this case, the compiler is doing a binary operation of AND, and 1 (or any non-zero) AND 0 is always going to be zero, which is expressed as false in this case. It's the difference between a bitwise operator and a logical one.
Jeremy Falcon
Precisely, since I'm using both in the same code (hw management) I made my Dumb Mistake Of The Day :D
CALL APOGEE, SAY AARDWOLF GCS d--- s-/++ a- C++++ U+++ P- L- E-- W++ N++ o+ K- w+++ O? M-- V? PS+ PE- Y+ PGP t++ 5? X R++ tv-- b+ DI+++ D++ G e++>+++ h--- ++>+++ y+++* Weapons extension: ma- k++ F+2 X If you think 'goto' is evil, try writing an Assembly program without JMP. -- TNCaver "Go ahead, make my day"