记一些代码

判断一个整数值是不是2的整数次方:

1 int PowerOfTwo(unsigned val)
2 {
3    return !(val & (val - 1));
4 }
1 int const shift = sizeof(int)*8-1;
2 unsigned mask = (0x1<<shift);
3 if ( (a-b)&mask ) 
4       max_num = b;
5 else
6       max_num = a;
int const shift = sizeof(int)*8-1;//shift仅仅在此通过初始化赋值(以后不能再赋值了),其值为int类型长度(以字节为单位)的8倍-1,比如假定int类型为32位(4个字节),                                       那么shift=31,假定int类型为16位(2个字节),那么shift=15,注意C编译器的不同实现里,int类型可能是16位的,也可能是32位的
unsigned mask = (0x1<<shift); //0x1<<shift就是把0x01左移15位或31位,也就是mask的最高位(也就是15号位或31号位)设置为1,其它位都设置为0.

if((a-b)&mask) max_num = b; //这里的a和b推断应该是int类型吧,(a-b)要么小于0(负数),要么不小于0(正数或0),(a-b)也是int类型的,int类型是有符号的类型,用                      补码表示负数,最高位为1意味着这个数是负数。&运算是按位“与”运算,因为mask只有最高位是1,其它位全为0,这里的意思就是屏蔽掉(a-b)的其                      它位,只看(a-b)的最高位,如果(a-b)的最高位为1(说明是负数),那么( (a-b)&mask ) 就不是0。注意if ( (a-b)&mask ) 是if ((                       (a-b)&mask )!=0)的简化写法,((a-b)&mask)不为0,就说明(a-b)的最高位是1,也就是说(a-b)是一个负数,也就是说,b大a小。
else max_num = a;
这段代码就是把a、b两个数中比较大的一个的值放到变量max_num中。

 

 

 

 

转载于:https://www.cnblogs.com/BeWater/p/3262203.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值