这篇文章来自:http://blog.csdn.net/qp120291570/article/details/8708286

位运算

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;
}  



C语言中的位运算和逻辑运算的更多相关文章

  1. C/C++语言中的位运算

    在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作. 一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效地提高程序运行的效率.C语 ...

  2. C语言中的位运算的技巧

    一.位运算实例 1.用一个表达式,判断一个数X是否是2的N次方(2,4,8,16.....),不可用循环语句. X:2,4,8,16转化成二进制是10,100,1000,10000.如果减1则变成01 ...

  3. 深入理解计算机系统(2.2)---布尔代数以及C语言上的位运算

    布尔代数上的位运算 布尔代数是一个数学知识体系,它在0和1的二进制值上演化而来的. 我们不需要去彻底的了解这个知识体系,但是里面定义了几种二进制的运算,却是我们在平时的编程过程当中也会遇到的.这四种运 ...

  4. PHP中的位运算与位移运算(其它语言通用)

    /* PHP中的位运算与位移运算 ======================= 二进制Binary:0,1 逢二进1,易于电子信号的传输 原码.反码.补码 二进制最高位是符号位:0为正数,1为负数( ...

  5. golang中算数运算、位运算、逻辑运算、赋值运算常用方法

    package main import "fmt" var a = 21.0 var b = 5.0 //var c float64 func main() { Arithmeti ...

  6. C语言中两位ASCII码可以表示汉字

    最近偶然有人问到这个相关字符编码的问题,所以百度了下参考了这两个资料,进行了简单分析. ******************************************************** ...

  7. Google Earth Engine 中的位运算

    Google Earth Engine中的位运算 按位运算是编程中一个难点,同时也是在我们后续处理影像数据,尤其要使用影像自带的波段比如QA波段经常会用到的一个东西.通过按位运算我们可以筛选出我们想要 ...

  8. 关于C/C++中的位运算技巧

    本篇文章讲述在学习CSAPP位运算LAB时的一些心得. 移位运算的小技巧 C/C++对于移位运算具有不同的策略,对于无符号数,左右移位为逻辑移位,也就是直接移位:对于有符号数,采用算术移位的方式,即左 ...

  9. C/C++中的位运算

    位运算     位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息的结果. 位运算符有:     &(按位与).|(按位或) ...

随机推荐

  1. Bootstrap3 表格-条纹状表格

    通过 .table-striped 类可以给 之内的每一行增加斑马条纹样式. 跨浏览器兼容性 条纹状表格是依赖 :nth-child CSS 选择器实现的,而这一功能不被 Internet Explo ...

  2. SpringBatch前言

    批处理应用程序就是对程序进行批量处理. 特点:批量应用程序处理大量数据而无需人类干预. 用途:可以选择使用批处理程序来计算每月的财务报表.计算统计和索引文件的数据等等. 应用:当银行系统中有很多业务都 ...

  3. 20160222.CCPP体系详解(0032天)

    程序片段(01):宽字符.c+字符串与内存四区.c 内容概要:宽窄字符 ///宽字符.c #include <stdio.h> #include <stdlib.h> #inc ...

  4. Dynamics CRM2013 导入解决方案(快速视图窗体)SystemForm With Id Does Not Exist的解决方法

    在CRM2013的环境下导入解决方案报错,具体报错截图如下 根据id去数据库中查找这个id的systemform,确认是存在的,而且通过第二条记录我们也可以看到这个systemform属于哪个实体,我 ...

  5. Android Studio突然不显示logcat日志

    参考文章:http://blog.csdn.net/victor_e_n_01185/article/details/52818809 有时候,AS出现没有log的情况.一般您换了模拟器,或者使用真机 ...

  6. [Boost] 1.57.0 with VS2013 + Intel compiler

    The compiled version can be found below. Do not foget to give me a star. :) http://pan.baidu.com/s/1 ...

  7. 安卓框架——SlidingMenu使用技巧

    SlidingMenu的一些常用属性 原文转载http://blog.csdn.net/zwl5670/article/details/48274109 [java] view plain copy ...

  8. 为什么函数式编程可以没有while?

    以前想不通,今天在写代码时不知怎么的,偶然就发现了答案.. 比如说把某个字符串s中所有"00"及更长的'00'统统换为'0'.最后结果中不能包含'00'. 00001100--&g ...

  9. 微信开发之使用java获取签名signature(贴源码,附工程)

    一.前言 微信接口调用验证最终需要用到的三个参数noncestr.timestamp.signature: 接下来将会给出获取这三个参数的详细代码 本文的环境eclipse + maven 本文使用到 ...

  10. spark下使用submit提交任务后报jar包已存在错误

    使用spark submit进行任务提交,离线跑数据,提交后的一段时间内可以application可以正常运行.过了一段时间后,就抛出以下错误: org.apache.spark.SparkExcep ...