黑马程序员---C语言---内存剖析
------iOS培训、Java培训、Android培训, iOS学习型技术博客,期待与您交流------
按位与 &
1101110 101101
0110101 000100
——————— ---------------
0100100 000100
原位和1&,保持不变;和0&,都为0
因此,可以让原来数字的某位与1&,根据结果能确定该位是0还是1,且结果只有0或1
a&1==1 //a为奇数,因为奇数的最后一位是1
a&1==0 //a为偶数,因为偶数的最后一位是0
//输出一个整数的二进制形式
void printBinary(int num){
// 采用右移后,每一位&1取得每一位的值打印
// 定义变量,记录右移的位数
// 右移31后&1位取得第一位值 0或1
// (sizeof(num)<<3)-1==4*8-1==31
for ( int count=(sizeof(num)<<3)-1; count>=0; count--) {
printf("%d",(num>>count)&1); // 任何数&1结果只能为0或者1
if (!(count%4)) {
printf(" ");
if (!(count%8)) {
printf(" ");
}
}
}
printf("\n");
}
按位或 |
010110 101101
011100 000000
——————— ---------------
011110 101101
a|0=a
按位异或 ^
每位相同得0,不同得1。 且可以交换
a^b^c==a^c^b==b^a^c
a^a==0
a^0==a
a^b^a==b
// 利用位异或^运算实现a、b值的互换a^b^a==a^a^b==0^b==b
a=a^b;
b=a^b;
a=a^b;
左移 <<
a<<n==a*2的n次方
但是左移有可能导致正负性改变
右移 >>
a>>n==a/2的n次方
正负性不变
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。