What does |= (single pipe equal) and &=(single ampersand equal) mean
在以下几行中:
1 2 3 4 5 6
| //Folder.Attributes = FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= FileAttributes.Directory | FileAttributes.Hidden | FileAttributes.System | FileAttributes.ReadOnly;
Folder.Attributes |= ~FileAttributes.System;
Folder.Attributes &= ~FileAttributes.System; |
在c中,|=和&=是什么意思?#我想删除系统属性并保留其他属性…
它们是复合赋值运算符,翻译(非常松散)
进入之内
对&也是如此。在一些情况下,关于隐式强制转换有更多的细节,并且目标变量只被计算一次,但这基本上就是它的要点。
对于非复合运算符,&是位"and",|是位"or"。
编辑:在这种情况下,您需要Folder.Attributes &= ~FileAttributes.System。了解原因:
- ~FileAttributes.System是指"除System以外的所有属性"(~是位非)
- &表示"结果是操作数两边的所有属性"
所以它基本上是一个遮罩-只保留那些出现在("除了系统之外的所有东西")中的属性。一般来说:
- EDOCX1是一个更好的方式描述它,因为它是以东X1
- Thanks for answers/but for my purpose(removing system attribute)which one should I use($124;=or&;=)
- @Lostford:EDOCX1音标3
- @Lostford:have edited the answer to explain why George's comment is correct.
- @Jon Skeet:thanks for answer's edit/you completed this thread…
- 我不喜欢这个简短的发言。有破碎的东西微软可能有一个工作方法敦促给我们另一种方式来写一些东西,那是很好的工作。
a |= b相当于a = a | b,但a只评估一次。a &= b相当于a = a & b,但a只评估一次。
为了在不更改其他位的情况下删除系统位,请使用
1
| Folder.Attributes &= ~FileAttributes.System; |
~是位否定。这样,除系统位外,所有位都将设置为1。由于任何x的0 & x = 0和1 & x = x,用屏蔽将系统设置为0并保持所有其他位不变。
- What does it mean that EDOCX1 plenic 4 is only evaluated once?为什么要评估更多的时代比那?
- @Silkforce this is called short-circuit evaluation,see en.wikipedia.org/wiki/short-circuit@uu evaluation
- "Pollks so basically EDOCX1"(音乐剧5)Actually Means EDOCX1(音乐剧6)
- @Silkfire yep but don't interchange one pipe and two pipes.
I want to remove system attribute with keeping the others..
您可以这样做:
1
| Folder.Attributes ^= FileAttributes.System; |
- 我想你想用一个Xor敦促一个和这个。
- 一个混淆的,是需要还是不需要
- @Lostford:it most certainly is!See my answer for explanation
- @Gamezelda,thanks-corrected.
- @Lostford the two methods are analogous as far as I'm aware
- @Chriss EDOCX1 psychological 7 will set the bit if it was not already set,EDOCX1 penalic 8 does not set it.