<<在这段代码中做了什么?
[Serializable]
[Flags]
public enum SiteRoles
{
User = 1 << 0,
Admin = 1 << 1,
Helpdesk = 1 << 2
}
Run Code Online (Sandbox Code Playgroud)
这意味着左移位,所以:
int i = 1 << 2;
// 0000 0001 (1)
// shifted left twice
// 0000 0100 (4)
Run Code Online (Sandbox Code Playgroud)
左位移类似于乘以2,右位移作为除以2.
Bitshifts是有用的,因为它们在使用位掩码时更好地传达语义,并且它们(至少在x86上)比乘法更快