|
Come on, guys. Stop this mess, ok? I don't pretend to know the absolute truth about this but, man, you are wrong or, at least, you might be confusing beginners.
The fact that, as you say, "both terms are evaluated no matter what the first expression evaluates to" with the & operator is the key, and it is not a trivial difference. See this example:
string s = null;
bool b1 = s != null && s.Length == 0;
bool b2 = s != null & s.Length == 0;
You see the operands here are boolean expressions. However, while b1 would be assigned false without any problem, a runtime NullReferenceException would be thrown when trying to assing the value to b2. This is a really important difference. Both operands are not the same and can never be considered as if they were the same. Under some circumstances they can return the same result, yes, but that does not mean that they are exactly the same or that you can use any of them when you use boolean expressions.
Can we, please, go on with our lifes now?
|
|
|
|
|
Gets my five - nicely argued.
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Manfred R. Bihy: "Looks as if OP is learning resistant."
|
|
|
|
|
I'm just a novice programmer and didn't even realize (or I forgot?) that & was a legal command. I've always just used &&. I'm so confused by the last 30 some posts, I'm going to keep it simple and make sure I never use &.
|
|
|
|
|
Wise decision!
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Manfred R. Bihy: "Looks as if OP is learning resistant."
|
|
|
|
|
Agreed! That is of course only if he meant to say: "I'll never use & with boolean operands."
|
|
|
|
|
That's how I read it.
Real men don't use instructions. They are only the manufacturers opinion on how to put the thing together.
Manfred R. Bihy: "Looks as if OP is learning resistant."
|
|
|
|
|
Indeed. & and | on ints (or uints) is very useful.
|
|
|
|
|
Absolutely, because && and || wouldn't work with ints (and uints).
|
|
|
|
|
Well f. me sideways and call me Dr Dream. You come and tell me that I don't know what I'm saying and immediately say what I said.
Bitwise means EVERYTHING is evaluated and then anded ored noted xored and stuck through the mincer. Binary menas once the result is known it stops. I appologise if using technical terms confussed you but that's it.
Panic, Chaos, Destruction.
My work here is done.
or "Drink. Get drunk. Fall over." - P O'H
OK, I will win to day or my name isn't Ethel Crudacre! - DD Ethel Crudacre
Have a bit more patience with newbies. Of course some of them act dumb -- they're often *students*, for heaven's sake. -- (Terry Pratchett, alt.fan.pratchett)
|
|
|
|
|
Shut the f... up.
Ego non sum semper iustus tamen Ego sum nunquam nefas!
|
|
|
|
|
So if I have this straight, in your example:
if(UsernameTextBox.Text == "Manager" & PasswordTextBox.Text == "Maintenance")
because both arguments are boolean, the '&' is effectively acting just like a '&&' except for being trivially less efficient because it is always doing both of the string compares.
I know in this case you were merely quoting previous post using '&', but even if the non-short-circuit behaviour would be useful sometime, I'd avoid it because it just looks wrong to me. We're in a mixed C++/C# environment here, and I have to be on the lookout for misused '&'s in the code as it is. Allowing for false positives is not in the cards here.
That said, I think you got a raw deal.
|
|
|
|
|
And quite rightly so.
While for booleans, & can work as a logical operator, in all other cases it is bitwise. For consistency, use a single operatopr to represent logical operators throughout, the C# designers (C really) chose && for this purpose.
It may work, but its obfuscated, and should be rejected or corrected by any reasonable code review, regardless of any appeals you make to technical documentation.
|
|
|
|
|
Rob, I think the problem is that you are assuming human beings are rational/reasonable.
Where I am currently, I have to fill out a form and get authorization to fix a simple memory leak. The code base is several million lines of C++, suffering from 20 years of technical debt. Since I already have a reputation for being "too critical about code quality" which causes my input to get knocked down a level or two, I have to bite my tongue a lot.
It's a grand learning experience, but I'll be glad when I figure out what the lesson is!
|
|
|
|
|
The lesson : Never start a fight in the Hall of Shame
|
|
|
|
|
The "answer" person's assumptions doesn't seem to match with what you have in your message.
Using & is different than using && and the results could be different, depending on what you are comparing. Since both return either true of false, there will not be a difference in the result. (The only difference is how the result is achieved.)
In C and C++, you can "AND items that are not boolean as:
int i, j;
i = 1;
j = 2;
if (i and j) --> result is false (bitwise AND: 1 & 2 yields 0 or false).
if (i and j) --> result is true (logical AND: 1 && 2 yields non-zero or true).
Hope this helps.
|
|
|
|
|
I like this:
#define TRUE (rand() > 0.1 ? TRUE : FALSE) // happy debugging losers
|
|
|
|
|
lol. By the way, you look like Adam Levine[^] of Maroon 5.
Ignorance of the ability brings disability.
|
|
|
|
|
Thanks. Hope it was a compliment;)
|
|
|
|
|
Of course it is.
Ignorance of the ability brings disability.
|
|
|
|
|
|
P1l19r1m wrote: #define TRUE (rand() > 0.1 ? TRUE : FALSE) // happy debugging losers
Shouldn't that just be #define TRUE (rand() > 0.1) ?
I guess I haven't used c++ in a while, but what happens when you use a circular define like that?
|
|
|
|
|
can we do that ??
i will put this in my mate's code
|
|
|
|
|
You should do it!!!
|
|
|
|
|
that's pure evil hopefully, there is no switch statement using this constant...
|
|
|
|
|
I've made some kind of mistake "Copypasting" is evil . As MSDN ( http://msdn.microsoft.com/en-us/library/398ax69y.aspx ) claims, rand() function returns a pseudorandom integer in the range 0 to RAND_MAX (32767). So, the preferable way is to use the following "working code":
#define REALLYTRUE 1
#define REALLYFALSE 0
#define TRUE (rand() > (32762/2) ? REALLYTRUE : REALLYFALSE) // happy debugging losers
P.S. If to compile this code:
#define TRUE (rand() > 0.1 ? TRUE : FALSE) // happy debugging losers
we will have an error like:
c:\temp\win32\randex\randex.cpp(19) : error C2065: 'TRUE' : undeclared identifier
But using the new version of code it will be "all right"
|
|
|
|