C语言中的位运算和逻辑运算

来源:互联网 发布:java软件开发技术 编辑:程序博客网 时间:2024/06/05 21:03

位运算

C语言中的位运算包括与(&),或(|),亦或(^),非(~).

下面的代码包扩了这些基本运算,还有一个两个数的交换(不用第三个数)。

#include<stdio.h>#include<stdlib.h>//print a int in binaryvoid 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;}


原创粉丝点击