我们先来看下面的代码
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
iTextSharp.text.Font normalRedFont = new Font(baseFont, 10, Font.NORMAL | Font.BOLD, BaseColor.RED);
看字面意思,| 似乎是或者的意思?
我记得老师教C++的时候说过|是按位或,&是按位与,那么在C#中|是什么意思呢?我自己做了个小实验
int sss = 1 | 2; Console.WriteLine(sss); sss = 15 | 0; Console.WriteLine(sss); sss = 15 | 1; Console.WriteLine(sss); Console.ReadKey();
就此看来,它的意思和C++中一致,都是按位或。
这样的话疑问就来了,最开始的代码中的写法意味着什么呢?第一句运算玩的结果可能既不是Ssl3也不是Tls。第二句运算完既不是NORMAL也不是BOLD。
这就是我疑惑的地方,但是,为什么好多人都要这么写呢?
!,&&,|| 这个是逻辑的 非与或
~,&,| 这三个是按位 非与或
你按数字二进制位来操作,比如 1|2 就是 0001 或0010 结果为 0011,就是3
这个符号是“或”的意思;
与、或、非、异或这些符号在标志属性变量中非常常用,相对应用来说也可以认为在底层中很常用;
为什么用这个——很快很方便很爽,楼上的都没说到重点,本来二进制很直观但编程中我们并没有二进制描述方式,一般使用10进制,而需要使用二进制这种表述情况下是用16进制来描述。因此你只需要记住1248(代表4个位)即可。
如窗口属性的叠加 假设 属性 A,对应枚举值a=0X01,b=0X02
那么wnd.A=a|b就完成了叠加。
同理:ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls;
很多通讯也会大量使用,甚至我写权限也直接用位操作。位操作是计算机最最基本的指令,肯定也就是最短的指令之一,合适的场景使用不仅方便而且很快。
好的,受教了。谢谢你