谭浩强C语言教程第十二章-位运算

12位运算1

12.1位运算符C语言提供了六种位运算符:1

12.1.1按位与运算1

12.1.2按位或运算2

12.1.3按位异或运算2

12.1.4求反运算3

12.1.5左移运算3

12.1.6右移运算3

12.2位域(位段)4

12.3本章小结6

位运算

前面介绍的各种运算都是以字节作为最基本位进行的。 但在很多系统程序中常要求在位(bit)一级进行运算或处理。C语言提供了位运算的功能,这使得C语言也能像汇编语言一样用来编写系统程序。

位运算符C语言提供了六种位运算符:

& 按位与

| 按位或

^ 按位异或

~ 取反

<< 左移

>> 右移

按位与运算

按位与运算符"&"是双目运算符。其功能是参与运算的两数各对应的二进位相与。只有对应的两个二进位均为1时,结果位才为1,否则为0。参与运算的数以补码方式出现。

例如:9&5可写算式如下:

(9的二进制补码)

(5的二进制补码)

(1的二进制补码)

可见9&5=1。

按位与运算通常用来对某些位清0或保留某些位。例如把a 的高八位清 0 ,保留低八位,可作a&255运算( 255 的二进制数为0000000011111111)。

【例12.1】

main(){

int a=9,b=5,c;

c=a&b;

printf("a=%d\nb=%d\nc=%d\n",a,b,c);

}

按位或运算

按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只要对应的二个二进位有一个为1时,结果位就为1。参与运算的两个数均以补码出现。

例如:9|5可写算式如下:

(十进制为13)可见9|5=13

【例12.2】

main(){

int a=9,b=5,c;

c=a|b;

printf("a=%d\nb=%d\nc=%d\n",a,b,c);

}

按位异或运算

按位异或运算符“^”是双目运算符。其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。参与运算数仍以补码出现,例如9^5可写成算式如下:

(十进制为12)

【例12.3】

main(){

int a=9;

a=a^5;

printf("a=%d\n",a);

}

求反运算

求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位求反。

例如~9的运算为:

~(0000000000001001)结果为:1111111111110110

左移运算

左移运算符“<

例如:

a<<4

指把a的各二进位向左移动4位。如a十进制3),左移4位后十进制48)。

右移运算

右移运算符“>>”是双目运算符。其功能是把“>> ”左边的运算数的各二进位全部右移若干位,“>>”右边的数指定移动的位数。

例如:

设 a=15,

a>>2

表示把000001111右移十进制3)。

应该说明的是,对于有符号数,在右移时,符号位将随同移动。当为正数时,最高位补0,而为负数时,符号位为1,最高位是补0或是补1 取决于编译系统的规定。Turbo C和很多系统规定为补1。

【例12.4】

main(){

unsigned a,b;

printf("input a number: ");

scanf("%d",&a);

b=a>>5;

b=b&15;

printf("a=%d\tb=%d\n",a,b);

}

请再看一例!

【例12.5】

main(){

char a='a',b='b';

int p,c,d;

p=a;

p=(p<<8)|b;

d=p&0xff;

c=(p&0xff00)>>8;

printf("a=%d\nb=%d\nc=%d\nd=%d\n",a,b,c,d);

}

位域(位段)

谭浩强c语言不讲位运算呢,谭浩强C语言教程第十二章-位运算.doc相关推荐

  1. 谭浩强c语言不讲位运算呢,谭浩强c语言教程_第十二章-位运算谭浩强c语言教程_第十二章-位运算.doc...

    12位运算1 12.1位运算符C语言提供了六种位运算符:1 12.1.1按位与运算1 12.1.2按位或运算2 12.1.3按位异或运算2 12.1.4求反运算3 12.1.5左移运算3 12.1.6 ...

  2. 单片机c语言置位程序流程图,单片机c语言教程第十二章--C51开关分支语句

    学习了条件语句,用多个条件语句能实现多方向条件分支,但是能发现使用过多的 条件语句实现多方向分支会使条件语句嵌套过多,程序冗长,这样读起来也很不好读.这个时候 使用开关语句同样能达到处理多分支选择的目 ...

  3. VLSI数字信号处理系统——第十四章冗余运算

    VLSI数字信号处理系统--第十四章冗余运算 作者:夏风喃喃 参考: (1) VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著 (2) socvista https://w ...

  4. c语言压缩文本文件北京理工大学,北京理工大学C语言程序设计第十二章文件.ppt...

    北京理工大学C语言程序设计第十二章文件 2000年1月25日 北京理工大学 / 第十二章 文件 第一节 文件概述 第二节 文件的处理 第三节 文件的顺序读写操作 第四节 文件的随机读写操作 第五节 文 ...

  5. R语言实战笔记--第十二章 重抽样(置换检验)与自助法

    R语言实战笔记–第十二章 重抽样(置换检验)与自助法 标签(空格分隔): R语言 重抽样 自助法 置换检验 置换检验 双样本均值检验的时候,假设检验的方法就是,检查正态性.独立性.方差齐性,分别对应的 ...

  6. [Python从零到壹] 五十二.图像增强及运算篇之图像掩膜直方图和HS直方图

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. 【维生素C语言】第十二章 - C语言自定义类型讲解(联合体、枚举、联合体)

    原标题:自定义类型讲解?楼下保安大爷直呼内行!![C语言] 前言: 本章将对C语言自定义类型进行讲解,前期我们讲过结构体,这章将会把前面结构体还没讲完的知识继续补充. 一.结构体(struct) 结构 ...

  8. C语言谭浩强第三版第十二章例题及课后题:位运算

    eg12.1取一个整数a从右端开始的4~7位 0000...000000        0 1111...111111       ~0  1111...110000       ~0<< ...

  9. c语言 12大于12么,【C语言】第十二章

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 为什么会出现动态内存分配 这个问题要结合数组来进行讨论.在C99之前的标准中,C语言中数组的定义要求必须给定常量的大小才 ...

最新文章

  1. Mxnet - Understanding weight shape for Dense Layer MXNET权重参数形状的疑惑(内部设计形式行列谁在前不用管,多个转置运算而已)
  2. 别瞎学了!Docker已被K8S取代!
  3. [HDOJ3652]B-Number(数位dp)
  4. Distributed Systems-leader based分布式一致性协议
  5. (46)分析 INT 0x2E 和 sysenter
  6. [C#] 连接数据库并验证用户名和密码
  7. SpringBoot中使用POI实现自定义Excel布局式导出
  8. 获取ini内容 GetPrivateProfileString GetPrivateProfileInt
  9. 问题之JS中传递数值过大或前置有零时
  10. 前端学习(14):相对路径和绝对路径
  11. vim下php文件中自动缩排html代码
  12. 卷积定理及常见傅里叶变换表
  13. c# - - - 使用Chloe框架连接PostgreSQL数据库
  14. mysql中字符串汇总_Mysql中常见字符串处理函数汇总
  15. mysql被禁用了怎么办_数据库mysql存储遇到禁用怎么办?
  16. 日语零基础学习 【汇总】日语学习网站
  17. 骞云再获阿里云产品生态集成认证,携手共建云原生管理新生态
  18. LINUX流量控制工具 TC详解
  19. 网络媒体教程:采访与写作
  20. Cocos creator(JavaScript)- 简单实现连线小游戏

热门文章

  1. syslog server配置与logrotate的配置与理解
  2. 获取手机屏幕上点击位置的坐标
  3. 红米2a android5,红米手机/小米手机2S/2A三机对比图赏
  4. Opencv之图像矩(晦涩难懂,用到再看吧)
  5. 西门子博图PLC程序无法下载到PLCSIM
  6. 传说中的BNET边缘传输
  7. python实用案例合集
  8. 从数字化视角看飞书产品
  9. M1芯片实现Kail虚拟机(无Parallels)
  10. 【3D视觉原理】2-3D传感器原理