谭浩强c语言不讲位运算呢,谭浩强C语言教程第十二章-位运算.doc
谭浩强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相关推荐
- 谭浩强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 ...
- 单片机c语言置位程序流程图,单片机c语言教程第十二章--C51开关分支语句
学习了条件语句,用多个条件语句能实现多方向条件分支,但是能发现使用过多的 条件语句实现多方向分支会使条件语句嵌套过多,程序冗长,这样读起来也很不好读.这个时候 使用开关语句同样能达到处理多分支选择的目 ...
- VLSI数字信号处理系统——第十四章冗余运算
VLSI数字信号处理系统--第十四章冗余运算 作者:夏风喃喃 参考: (1) VLSI数字信号处理系统:设计与实现 (美)Keshab K.Parhi/著 (2) socvista https://w ...
- c语言压缩文本文件北京理工大学,北京理工大学C语言程序设计第十二章文件.ppt...
北京理工大学C语言程序设计第十二章文件 2000年1月25日 北京理工大学 / 第十二章 文件 第一节 文件概述 第二节 文件的处理 第三节 文件的顺序读写操作 第四节 文件的随机读写操作 第五节 文 ...
- R语言实战笔记--第十二章 重抽样(置换检验)与自助法
R语言实战笔记–第十二章 重抽样(置换检验)与自助法 标签(空格分隔): R语言 重抽样 自助法 置换检验 置换检验 双样本均值检验的时候,假设检验的方法就是,检查正态性.独立性.方差齐性,分别对应的 ...
- [Python从零到壹] 五十二.图像增强及运算篇之图像掩膜直方图和HS直方图
欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...
- 【维生素C语言】第十二章 - C语言自定义类型讲解(联合体、枚举、联合体)
原标题:自定义类型讲解?楼下保安大爷直呼内行!![C语言] 前言: 本章将对C语言自定义类型进行讲解,前期我们讲过结构体,这章将会把前面结构体还没讲完的知识继续补充. 一.结构体(struct) 结构 ...
- C语言谭浩强第三版第十二章例题及课后题:位运算
eg12.1取一个整数a从右端开始的4~7位 0000...000000 0 1111...111111 ~0 1111...110000 ~0<< ...
- c语言 12大于12么,【C语言】第十二章
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 为什么会出现动态内存分配 这个问题要结合数组来进行讨论.在C99之前的标准中,C语言中数组的定义要求必须给定常量的大小才 ...
最新文章
- Mxnet - Understanding weight shape for Dense Layer MXNET权重参数形状的疑惑(内部设计形式行列谁在前不用管,多个转置运算而已)
- 别瞎学了!Docker已被K8S取代!
- [HDOJ3652]B-Number(数位dp)
- Distributed Systems-leader based分布式一致性协议
- (46)分析 INT 0x2E 和 sysenter
- [C#] 连接数据库并验证用户名和密码
- SpringBoot中使用POI实现自定义Excel布局式导出
- 获取ini内容 GetPrivateProfileString GetPrivateProfileInt
- 问题之JS中传递数值过大或前置有零时
- 前端学习(14):相对路径和绝对路径
- vim下php文件中自动缩排html代码
- 卷积定理及常见傅里叶变换表
- c# - - - 使用Chloe框架连接PostgreSQL数据库
- mysql中字符串汇总_Mysql中常见字符串处理函数汇总
- mysql被禁用了怎么办_数据库mysql存储遇到禁用怎么办?
- 日语零基础学习 【汇总】日语学习网站
- 骞云再获阿里云产品生态集成认证,携手共建云原生管理新生态
- LINUX流量控制工具 TC详解
- 网络媒体教程:采访与写作
- Cocos creator(JavaScript)- 简单实现连线小游戏