An introduction to bitwise operators

本文深入探讨了位运算符的应用,包括AND、OR、NOT运算符的使用实例,并详细介绍了异或运算符在变量交换中的作用。同时,文章还讨论了如何结合取反和与运算符来实现特定位清零的操作,以及位域的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读了codeproject上的这篇《An introduction to bitwise operators,前面两个运算符说得不错,但第三个异或运算符感觉不够准确,作者给出的示例不知道有什么用处,不就是把数做了两次异或又回来了么?<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

&运算符用来判定某些位是0还是1
None.gif #include  < iostream >
None.gif
using   namespace  std;
None.gif
int  main( void )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int num = 17;
InBlock.gif    
if(num&0x10)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        cout
<<"第四位是"<<endl;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
else
ExpandedSubBlockStart.gifContractedSubBlock.gif    
dot.gif{
InBlock.gif        cout
<<"第四位是"<<endl;
ExpandedSubBlockEnd.gif    }

InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

|运算符用来对某些位置1

None.gif #include  < iostream >
None.gif
using   namespace  std;
None.gif
int  main( void )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int num = 50;
InBlock.gif    num 
= num|0x04;
InBlock.gif    cout
<<hex<<num<<endl;
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif

异或运算符最常用的应该是用其实现两个数的交换:

None.gif #include  < iostream >
None.gif
using   namespace  std;
None.gif
int  main( void )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int n1 = 17,n2 = 20;
InBlock.gif    n1 
= n1^n2;
InBlock.gif    n2 
= n2^n1;
InBlock.gif    n1 
= n1^n2;
InBlock.gif    cout
<<n1<<" "<<n2<<endl;
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif

   
   将取反运算符和与运算符结合起来,可以对某些位置零:

None.gif #include  < iostream >
None.gif
using   namespace  std;
None.gif
int  main( void )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int b = 50;
InBlock.gif    cout 
<< "b = " << b << endl;
InBlock.gif    
int c = b & ~0x10;
InBlock.gif    cout 
<<hex<< "c = " << c << endl;
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif

最后的位域有一个问题没搞懂:

None.gif #include  < iostream >
None.gif
using   namespace  std;
None.gif
None.gif
struct  date_struct 
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
int day:4,   // 1 to 31
InBlock.gif
    month : 4,   // 1 to 12
InBlock.gif
    year:12
ExpandedBlockEnd.gif}
;
None.gif
None.gif
int  main( void )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    date_struct d1;
InBlock.gif    d1.day 
= 8;
InBlock.gif    d1.month 
= 8;
InBlock.gif    d1.year 
= 1844;
InBlock.gif    cout
<<d1.year<<" "<<d1.month<<" "<<d1.day<<endl;
InBlock.gif    
return 0;
ExpandedBlockEnd.gif}

None.gif

我已经设置daymonth各自占据4位,应该是可以满足的,可结果却都是-8why?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值