位运算
C语言中的位运算包括与(&),或(|),亦或(^),非(~).
下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数)。
#include<stdio.h> #include<stdlib.h> //print a int in binary void bit_print(int a) { int i; int n=16; int mask = 1 << (n-1); for(i = 1; i <= n; ++i) { putchar(((a & mask) == 0) ? '0' : '1'); a <<= 1; if(i %8 == 0 && i < n) putchar(' '); } printf("\n"); } void inplace_swap(int *x,int *y) { *y=*x^*y; *x=*x^*y; *y=*x^*y; } int main() { int a=19,b=38; printf("a: "); bit_print(a); printf("b: "); bit_print(b); printf("~a: "); bit_print(~a); printf("a&b:"); bit_print(a&b); printf("a|b:"); bit_print(a&b); printf("a^b:"); bit_print(a^b); printf("a=%d,b=%d\n",a,b); inplace_swap(&a,&b); printf("After swap:\n"); printf("a=%d,b=%d\n",a,b); return 1; }
逻辑运算
逻辑运算包括||,&&,!,对应逻辑运算的或,与,非。逻辑运算的结果只有两种,TRUE或者FALSE。0对应FALSE,非0都是TRUE。
逻辑运算包括一个短路求值的特征:如果对第一个参数求值就能确定表达式的结果,那么逻辑表达式就不会对第二个参数求值。
一个简单的例子:
#include<stdio.h> int main() { int a=32,b=43; printf("a:%d,b:%d\n",a,b); printf("!a:%d,a||b:%d,a&&b:%d\n",!a,a||b,a&&b); printf("a++||b--:%d\n",a++||b--); printf("a:%d,b:%d\n",a,b); // printf("Hello\n"); return 1; }