C++程序设计教程 第12章 枚举类型、位运算

合集下载

C语言程序设计课件:位运算

C语言程序设计课件:位运算


补码:1 1 1 0 1 1 0 0

求反:1 0 0 1 0 0 1 1
❖ +1

原码:1 0 0 1 0 1 0 0
❖ 求得:[X]原=1 0 0 1 0 1 0 0B。
❖ 例:求18-15的值。 ❖ 利用补码,减法运算就转化为加法实现,变成了求[18-15 ]补,
[18-15 ]补等价为[18]补+[-15]补,先求-15 的补码,-15的二 进制表示为10001111,则-15 的补码为
❖ 反码表示规则:正数的反码与原码相同;负数的反码,符号位为 “1”不变,数值部分按位取反,即0变为1,1变为0。反码很少 直接用于计算机中,它是用于求补码的过程产物。
❖ 例如:00111000的反码为00111000,10111000的反码为11000111。 ❖ 补码的表示规则:正数的补码与原码相同;负数的补码是在反码
11.2.2位复合赋值运算符
C 语言提供了如表 11.2 所示的 5 种位复合赋值运算符。
表 11.2 位复合赋值运算符
运算符 含义
结合性
优先级(附录中等级)
&=
先对右值按位与,再赋值 自右向左
15
|=
先对右值按位或,再赋值 自右向左
15
^=
先对右值按位异或,再赋值 自右向左
15
<<=
先对右值左移,再赋值
00001101赋值给n,p的值二进制数为00000000 00000111,n&p的值对应二进制数为00000000 00000101赋值给变量t。
11.4错误解析
❖ 1.位运算要求操作数的数据类型为整型。 ❖ 2.左移运算将一个位串信息向左移指定的位,左端移出的位的

c++ enum class 位运算

c++ enum class 位运算

近年来,C++编程语言在软件开发领域中的地位日益重要,而其中的enum class和位运算功能更是备受程序员关注。

本文将从简单到深入的角度,对这一主题进行全面评估和探讨。

一、初识enum class和位运算枚举类型(enum)在C++中早已是常见的数据类型,而enum class则是在C++11标准中引入的一项增强功能。

相较于传统enum,enum class提供了更强的类型安全性和作用域限定。

而位运算则是一种在计算机中常见的操作类型,它使用二进制位来进行各种数学运算,如与、或、非等。

二、enum class和位运算的基本语法和使用在C++中,我们可以使用enum class关键字定义一组具有特定作用域的枚举类型,从而提高了类型安全性和代码清晰度。

而位运算则是使用特定的位操作符(如“&”、“|”、“^”、“~”等)来对二进制位进行运算。

这些基本语法和使用方法将为我们后续的深入研究奠定基础。

三、深入理解enum class和位运算在实际编程中,enum class和位运算的运用远不止于简单的定义和操作。

对于枚举类型的每个值,我们可以使用位运算符号来进行与或非等操作,进而实现更加灵活多变的程序逻辑。

而enum class的类型安全性和作用域限定也为我们避免了一些传统enum可能带来的潜在问题。

四、应用实例和案例分析考虑到enum class和位运算在实际开发中的广泛应用,本文选取了一些典型的应用实例和案例进行详细分析和讨论。

从中我们可以更加深刻地理解enum class和位运算的灵活性和强大功能,也可以从中获取一些实用的编程技巧和经验。

五、个人观点和总结作为一名具有丰富编程经验的C++程序员,我对enum class和位运算的重要性和价值深信不疑。

在实际项目中,我深刻体会到了它们的实际作用和价值,并将继续深入研究和应用。

我期待更多的程序员能够充分认识到enum class和位运算的重要性,从而在实际开发中发挥它们的最大价值。

《C语言程序设计上机指导》项目八枚举与位运算

《C语言程序设计上机指导》项目八枚举与位运算

×
任务实施 实验8-1-1 枚举类型元素引用示例
源程序8-1-1: #include <stdio.h> void main( ) {
任务一 关于枚举实验
一、关于枚举实验 二、实验考核
三、典型例题及解 析
×
enum em{em1=3,em2=1,em3}; char *aa[]=
{“AA”,”BB”,”CC”,”DD”}; printf(“%s%s%s\n”,aa[em1],aa[em2],
三、典型例题及解 析
×
思考 那么若要完整的打印出char *aa[]的赋
值我们就要修改源程序??
任务一 关于枚举实验
一、关于枚举实验 二、实验考核
三、典型例题及解 析
×
实验结果
结果就是:修改后的源程序我们将得到对a 的所有赋值!
任务一 关于枚举实验
一、关于枚举实验 二、实验考核
三、典型例题及解 析
×
a=a>>1; a=a|rb; }
return(a); }
任务二 关于位运算实验
一、关于位运算实 验
二、实验考核
unsigned getbits(unsigned); unsigned int a; printf(“\n input an octal number:”);
任务二 关于位运算实验
一、关于位运算实 验
二、实验考核
三、典型例题及解 析
×
scanf(“%o”,&a); printf(“result:%o\n” ,getbits(a)); return 0; }
三、典型例题及解 析
×
(3)了解位段的概念和位段类型数据 的引用形式。

位运算与枚举类型

位运算与枚举类型

位运算
右移运算符(>>) 右移运算符(>>)
右移运算符>>是一个双目运算符; 右移运算符>>是一个双目运算符; >>是一个双目运算符 功能 将参加操作的左操作对象的全部位向右移动右操作对象指 定的位数,右移出去的数位丢失, 定的位数,右移出去的数位丢失,右移后左边留下的空位 填充取决于左操作对象的数据类型: 填充取决于左操作对象的数据类型: 对无符号数据( char和 int), ),左 对无符号数据(unsigned char和unsigned int),左 边补0 边补0; 对有符号数据(int和char)左边补其符号位,即正数 对有符号数据(int和char)左边补其符号位, 负数补1 补0、负数补1。
位运算
按位与运算符(&) 按位与运算符(
按位与运算符&是一个双目运算符; 按位与运算符&是一个双目运算符; 功能 将参加操作的两个对象的各个位分别对应进行“ 运算, 将参加操作的两个对象的各个位分别对应进行“与”运算, 两者都为1时结果为1 否则结果为0 即:两者都为1时结果为1,否则结果为0; 设有十进制整数:x=128、y=64, 设有十进制整数:x=128、y=64,则:
位运算
位运算符
C语言提供了下列11个用于位操作的运算符或复合运算符 语言提供了下列11 11个用于位操作的运算符或复合运算符 对程序设计中的位运算提供支持
运算符 & | ^ ~ << >> 运算符含义 按位与 按位或 按位异或 按位取反 按位左移 按位右移 运算符 &= |= ^= <<= >>= 运算符含义 位与赋值 位或赋值 位异或赋值 左移赋值 右移赋值

位运算与枚举类型

位运算与枚举类型

02
private int value; // 存储整数 值的私有字段
03
Color(int value) { this.value = value; } // 构造函数用于初 始化整数值
枚举类型与位运算的结合使用
}
```
05 位运算与枚举类型的比较 和选择
位运算与枚举类型的优缺点比较
速度快
位运算直接对二进制位进行操作,因 此执行速度较快。
枚举类型的特性
唯一性
01
枚举类型的每个常量都是唯一的,它们在内存中占用不同的内
存地址。
命名性
02
枚举类型的每个常量都有一个命名的标识符,方便程序员理解
和使用。
预定义值
03
枚举类型的每个常量都有一个预定义的整数值,默认从0开始递
增。
枚举类型的应用场景
状态表示
枚举类型常用于表示状态或模式,例如一周的天数、月份、季节 等。
基本枚举类型示例
}
```
枚举类型在switch语句中的应用
在使用`switch`语句时,可以将枚举值作为参数,每个`case`分支对应一个 枚举值。
使用枚举类型可以使代码更加清晰和易于维护,因为每个枚举值都有明确 的含义。
在`switch`语句中,可以使用枚举类型的名称代替具体的值,使代码更加 可读。
枚举类型在switch语句中的应用
01 02 03
例如 ```java Day day = Day.MONDAY;
枚举类型在switch语句中的应用
01 switch (day) { 02 case SUNDAY
03
System.out.println("Today is Sunday.");

c 枚举类型 数学运算

c 枚举类型 数学运算

c 枚举类型数学运算1.引言1.1 概述概述部分的内容可以围绕以下几个方面展开。

首先,介绍枚举类型的概念和特点。

枚举类型是一种特定的数据类型,在编程中用于定义一组取值有限的常量。

枚举类型的定义方式通常是通过关键字enum来实现,可以为每个常量赋予一个唯一的标识符。

其次,说明本文将围绕数学运算中的枚举类型展开讨论。

数学运算是数学领域中的重要内容,它涵盖了从最基础的四则运算到高级的概率统计和线性代数等领域。

在这些数学运算中,枚举类型的应用发挥着重要的作用,能够帮助我们更好地描述和解决问题。

进一步,阐述本文的结构和内容安排。

本文将首先对枚举类型的定义和特点进行详细介绍,包括如何定义和使用枚举类型以及枚举类型的一些常见特点和限制。

然后,将重点探讨枚举类型在数学运算中的应用,包括枚举类型在统计学、离散数学和图论等领域中的具体应用案例和算法实现。

最后,在结论部分对本文的内容进行总结,并讨论枚举类型在数学运算中的意义和局限性。

最后,明确本文的目的和意义。

本文旨在帮助读者更好地理解和运用枚举类型在数学运算中的应用,从而拓宽数学问题的解决思路,并为相关领域的研究提供一定的参考和借鉴。

通过深入研究枚举类型在数学运算中的应用,可以发现其中的规律和特点,进而为数学问题的解决提供有效的方法和工具。

此外,可以提及相关领域中的一些实际问题和挑战,以引发读者对本文内容的兴趣,并激发他们进一步探索和思考枚举类型在数学运算中的应用。

1.2 文章结构文章结构部分的内容:本文主要分为引言、正文和结论三个部分。

引言部分首先对主题进行概述,介绍了枚举类型和数学运算的关系,并引出文章的目的。

正文部分主要包括两个小节:枚举类型的定义和特点,以及数学运算中的枚举类型的应用。

在第一个小节中,将介绍枚举类型的定义和基本特点,包括枚举类型的定义方式、取值范围和属性等。

在第二个小节中,将详细探讨枚举类型在数学运算中的应用,例如在排列组合、概率统计等领域的应用情况,并通过实际例子进行说明和分析。

C语言程序设计课件位运算

C语言程序设计课件位运算
示例二
使用位异或运算可以检测一个整数的奇偶性。例如,将一 个整数与1进行位异或运算,如果结果为1,则该整数为奇 数;如果结果为0,则该整数为偶数。
示例三
使用位异或运算可以实现快速取模运算。例如,将一个整 数与一个常数进行位异或运算,可以得到该整数除以该常 数的余数。
06 位非运算
位非运算的定义
• 位非运算是一种位运算操作,它对一个二进制数的每一位进行取反操作。如果某一位是1,则位非运算后变为0;如果某一 位是0,则位非运算后变为1。
部分数组交换等。
THANKS FOR WATCHING
感谢您的观看
右移位运算
总结词
将二进制位向右移动若干位。
详细描述
右移位运算符(>>)将一个数的二进制位向右移动若干位,左侧空出的位用符号位填充。对于有符号整数,右 侧空出的位用符号位填充;对于无符号整数,右侧空出的位用0填充。右移位运算实质上是将该数除以2的若干次 方。
无符号右移位运算
总结词
将二进制位向右移动若干位,左侧空出的位用0填充。
C语言程序设计课件位运算
目录
• 位运算概述 • 移位运算 • 位与运算 • 位或运算 • 位异或运算 • 位非运算
01 位运算概述
位运算的定义
01
位运算是一种以二进制位为对象 的运算方式,通过对二进制位进 行操作来执行特定的功能。
02
在C语言中,位运算符包括按位与 (&)、按位或(|)、按位异或(^)、 按位取反(~)、左移(<<)和右移 (>>)。
位非运算的规则
位非运算的规则是将一个二进制数的 每一位都进行取反操作。具体来说, 如果某一位是1,则位非运算后变为0; 如果某一位是0,则位非运算后变为1。

C++课件:第12章位运算

C++课件:第12章位运算

右移运算符(>>)
二进制右移运算
右移运算符(>>)将一个整数的二进制 表示向右移动指定的位数,左侧用符 号位填充(对于有符号整数)。右移n 位相当于将该数除以2的n次方。
03
位运算示例
示例一:使用位运算符实现加密和解密
总结词
通过位运算实现简单的加密和解密功能
详细描述
使用位运算符对二进制数进行异或(XOR)运算,可以实现简单的加密和解密 功能。异或运算的特点是,相同位得0,不同位得1,因此可以对二进制数据进 行加密或解密。
04
位运算的应用场景
数据加密
通过将数据转换为二进制形式,并使用位运 算进行加密和解密操作,可以保护数据的机 密性。
硬件控制
在嵌入式系统或硬件编程中,使用位运算可 以对硬件寄存器进行直接操作,实现快速、 高效的硬件控制。
图像处理
在图像处理中,可以使用位运算实现像素级 别的操作,如图像的合并、掩码处理等。
答案
可以使用按位与运算符(&)实现两个整数的 对应位进行逻辑与操作。例如,要将整数x和y 的对应位进行逻辑与操作,可以使用x &= y的 语句。这将把x和y的对应位进行逻辑与操作, 并将结果存储在x中。
05
总结与回顾
位运算的重要性和应用场景
重要性和应用场景
位运算在计算机科学中具有广泛的应用,如 数据加密、网络协议处理、硬件交互等。通 过位运算,可以对二进制位进行操作,从而 实现高效的底层操作和控制。
02
位运算符详解
按位与运算符(&)
二进制按位与运算
按位与运算符(&)对两个整数的二进制表示进行逐位比较,只有当两个相应的二进制 位都为1时,结果位才为1,否则为0。

位运算枚举类型定义与编译预处理

位运算枚举类型定义与编译预处理
介绍了如何在C中使用枚举类型来表 示位运算中的不同状态,以及如何使 用位运算符对枚举类型进行操作。
02
编译预处理指令的基 本概念和用法
详细讲解了编译预处理指令的作用和 使用方法,包括宏定义、条件编译、 文件包含等。
03
常见的位运算技巧和 优化方法
分享了一些常见的位运算技巧和优化 方法,如使用位运算实现快速乘法、 判断一个数的二进制表示中1的个数 等。
条件编译在跨平台编程中的应用
在不同的操作系统或硬件平台上,可能需要定义不同的枚举常量或枚举类型。通过条件编译,可以根据目标平 台的特点选择合适的枚举定义,提高代码的可移植性和适应性。
结合位运算和预处理指令优化枚举类型存储和性能
位运算在枚举类型中的应 用
位运算可以高效地处理二进制数据,对于枚 举类型来说非常有用。例如,可以使用位运 算将多个枚举常量组合成一个整数,或者从 一个整数中提取出特定的枚举常量。
结合预处理指令优化存储 和性能
通过预处理指令可以定义一些宏或常量,用 于优化枚举类型的存储和性能。例如,可以 使用 `#define` 定义一个表示位掩码的宏, 然后使用位运算对枚举常量进行组合或提取 操作。这样可以减少内存占用和提高运算效
率。
06
总结与展望
回顾本次课程重点内容
01
位运算枚举类型的定 义和使用
枚举类型在程序中的应用
用于替代魔数(程序中硬编码的 数字常量),提高代码的可读性 和可维护性。
用于实现有限状态机,通过将状 态定义为枚举常量,可以清晰地 表示状态之间的转换关系。
01
用于表示一组离散的、固定的值 ,如一周的七天、颜色、状态等 。
02
03
用于实现位运算,通过将枚举常 量定义为特定的位模式,可以方 便地进行位运算操作。

C语言电子课件第12位运算

C语言电子课件第12位运算

(4) 按位右移运算主要用途 按位右移运算主要用途是对操作数做除法运算,即 将一个操作数除以 2n 的幂运算处理为右移 n 位的 按位右移运算。右移一位相当于除以 2 ,右移 n 位 相当于除以2n。 例4 从键盘上输入1个正整数给int变量n ,输出 由8~11位构成的数(从低位、0号开始编号)。 基本思路: (1)使变量n右移8位,将8~11位移到低4位上 (2)构造1个低4位为1、其余各位为0的整数。 (3)与n 进行按位与运算。 (4)输出与运算结果。
1 位 逻 辑 运 算
1. 位运算说明 ( 1 )位运算的操作数,只能是整型或字符型数据, 不能为实型数据。 (2 )位运算符中除按位取反“ ~”为单目运算符外, 其余均为二目运算符,即要求两侧各有一个运算量。
( 3 )参与运算时,操作数都必须首先转换成二进制
形式,然后再执行相应的按位运算。
2. 按位与运算符 (1) 按位与运算符:&
例6 从键盘上输入1个正整数给整型变量n,按二进制位输出该数。 #include "stdio.h" main() { int n, mask, i; printf("Input a integer number: "); scanf("%d",&n); /*构造1个最高位为1、其余各位为0的整数(屏蔽字)*/ mask = 1<<15; printf("%d=" , n); for(i=1; i<=16; i++) { putchar(n&mask ? ‟1‟ : „0‟); /*输出最高位的值(1/0)*/ n <<= 1; /*将次高位移到最高位上*/ if( i%4==0 ) putchar(„,‟); } /*四位一组,用逗号分开*/ printf("\bB\n"); } 程序运行情况: Input a integer number:1000 ←┘ 1000=0000,0011,1110,1000B

谭浩强C语言教程_第十二章-位运算-推荐下载

谭浩强C语言教程_第十二章-位运算-推荐下载

12.1.2 按位或运算
按位或运算符“|”是双目运算符。其功能是参与运算的两数各对应的二进位相或。只 要对应的二个二进位有一个为 1 时,结果位就为 1。参与运算的两个数均以补码出现。
例如:9|5 可写算式如下:
【例 12.2】
00001001
|00000101 00001101
main(){
}

int a=9,b=5,c;
12.1.4 求反运算
求反运算符~为单目运算符,具有右结合性。其功能是对参与运算的数的各二进位按位 求反。 例如~9 的运算为:
~(0000000000001001)结果为:1111111111110110
12.1.5 左移运算
左移运算符“<<”是双目运算符。其功能把“<< ”左边的运算数的各二进位全部左移若 干位,由“<<”右边的数指定移动的位数,高位丢弃,低位补 0。
12
位运算 ................................................................1
12.1 位运算符C语言提供了六种位运算符: ................................1
12.1.1
按位与运算 ................................................1
unsigned a,b; printf("input a number: "); scanf("%d",&a); b=a>>5; b=b&15; printf("a=%d\tb=%d\n",a,b); }

C第12章 位运算 C语言程序设计教程

C第12章 位运算 C语言程序设计教程

printf(“a^b=%x\n”,a^b);
}
此位翻转
结果:enter two hex number:10,35
a^b=25
按位取反运算符
❖~是一个单目运算符
❖作用:使一个数据中所有位都取其反值,即0变1, 1变0。
例:~a a= 0 0 0 0 0 0 1 1 ~a= 1 1 1 1 1 1 0 0
❖作用:将一个数中各个位全部左移若干位,移出 的部分舍弃,右边空出来的位置补零。
例:a<<2
a= 1 0 0 0 0 1 0 1 ma<a<in2(=) 1 0 0 0 0 1 0 1 0 0 { unsigned char x,b;
(十六进制数85) (十六进制数14)
舍弃printf(“enter a hex numbers补:”零); scanf(“%x”,&x);
struct packed_data *p=&x;
x.a x.b x.c x.d p->a p->b p->c p->d
❖可以给位段赋值
x.a=2 x.b=1 x.c=7 x.d=0
b=x<<2;
printf(“%x\n”,b);
}
结果:enter a hex number:85
14
右移运算符
❖>>是一个双目运算符
❖作用:将一个数中各个位全部右移若干位,右移出 的位丢弃,左端的补充要区分两种情况。
(1)无符号数,右移时左端补零
(2)有符号数,如果符号位为0(即正数),则左边补入 0,如果符号位为1(即负数),则左边补入的全是1。
例:a^mb ain()
{ au=nsi0gn0ed0 c1h0ar0a0,b0;

C语言共用体与枚举

C语言共用体与枚举
2013/11/22
C语言程序设计教程
第12章 共用体与枚举类型
8
(3) 共用体变量的地址和它的各个成员的地址相同。
(4) 不能企图引用共用体变量名来得到某成员的值。
(5) 共用体变量不能作函数参数,函数的返回值也不 能是共用体类型。 (6) 共用体类型和结构体类型可以相互嵌套,共用体 中成员可以为数组,甚至还可以定义共用体数组。
2013/11/22
C语言程序设计教程
第12章 共用体与枚举类型
21
12.4.3 位段结构
有时,存储1个信息不必占用1个字节,只需二进 制的1个或多个位就够用。如果仍然使用结构类型,则 造成内存空间的浪费。为此,C语言引入了位段类型。 1. 位段的概念与定义 所谓位段类型,是一种特殊的结构类型,其所有 成员均以二进制位为单位定义长度,并称成员为位段。 位段结构中位段的定义格式为: unsigned <成员名>:<二进制位数> 例如,CPU的状态寄存器,按位段类型定义如下:
2013/11/22
C语言程序设计教程
第12章 共用体与枚举类型
17
6.按位右移──>> (1)格式:x>>位数 (2)规则:使操作数的各位右移,移出的低位舍弃; 高位: 1)对无符号数和有符号中的正数,补0; 2)有符号数中的负数,取决于所使用的系统:补0 的称为“逻辑右移”,补1的称为“算术右移”。例如, 20 >> 2=5。
2013/11/22
C语言程序设计教程
第12章 共用体与枚举类型
15
0011 | 1001 1011=11 (3)主要用途:将1个数的某(些)位置1,其余各位 不变。
3.按位异或──^ (1)格式:x^y (2)规则:对应位相同时为0,不同时为1:3^9=10。 (3)主要用途:使1个数的某(些)位翻转(即原来为1的 位变为0,为0的变为1),其余各位不变。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
枚举类型是一种基本数据类型,而不是一种构造 类型。 位运算符只有逻辑运算和移位运算两类。位运算 符可以与赋值符一起组成复合赋值符。如 &=,|=,^=,>>=,<<=等。 利用位运算可以完成汇编语言的某些功能,如置 位,位清零,移位等。还可进行数据的压缩存储 和并行运算。 位域在本质上也是结构类型,不过它的成员按二 进制位分配内存。其定义、说明及使用的方式都 与结构相同。
2013-7-30 20
枚举变量的初始化
enum [week] { sun, mon, tue, wed, thu, fri, sat }w1,w2; w1=mon; w2=sat; printf(“%d,%d\n”,w1,w2); 则输出结果是多少?

1,6
typedef类型定义
1.含义:可以为数据类型取别名,别名的作 用和数据类型的作用一样。
15
右移运算
2013-7-30
实例:已知:int x=7,y=10,z=1;设字长为8位,求: x来自y= x&z=2
1 15 11
(0000 0111 & 0000 1010 = 0010)
(0000 0111 & 0000 0001 = 0001) (0000 0111 (0000 1010
¦y = y ¦z =
2013-7-30 10
typedef优点:

用typedef可以声明各种类型名,但不能用来定义变量。用 typedef声明数组类型,字符串类型,结构类型后,使用会 比较方便; 用typedef只是对已经存在的类型增加一个类型名,没有创 造新的类型。
使用typedef有利于程序的通用与移植。如将Int a,b,c;改为 long a,b,c;如果程序中多处用Int定义变量,则要改动多处。 如果用typedef定义类型: typedef int INTEGER;后,在程序 中所有整型变量都用INTEGER定义。改变时,只需把 typedef int INTEGER;改变为 typedef long INTEGER;即可
2013-7-30 17
运算符小结
算术运算符: +,-,*,/,% 赋值运算符: = 关系运算符: >,<,==,>=,<=,!= 逻辑运算符: &&, ||, ! 自增、自减运算符:++ ,- 位运算符:& , | , ^ , ~ , >> , << 逗号运算符: , 条件运算符: ? : 其它: *,&,( ),[ ] , . ,->,sizeof( ),(type),… 功能,优先级, 结合性 单目,双目,三目,结果
2013-7-30 14
左移运算



右移功能:把>>左边的运算数的各个二进位全部 右移若干位,由>>右边的数指定移动的位数,高 位丢弃,低位补0; 如a=16;a=a>>2;后,a=4; 如果右移时被舍弃的低位中不包含1,则右移1位 相当于除以2(缩小2倍);如000 1111>>2后变 为0000 0011,被舍弃的低位位中含有1,因此虽 右移2位,值并没有缩小4倍。而0011 0000<<2后 变为0000 1100;被舍弃的低位中不包括1,所以 值缩小4倍 如果高位为1,则右移时高位补1,高位为0,高位补 0;
2013-7-30
12
位运算
真值表 a 0 0 1 1
2013-7-30
真值表 a 0 0 1 1 b 0 1 0 1 a∧b 0 1 1 0 ~a 1 1 0 0 ~b 1 0 1 0
b a∧b a&b a¦ b 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 1
13


左移功能:把<<左边的运算数的各个二进位全部 左移若干位,由<<右边的数指定移动的位数,高 位丢弃,低位补0; 如a=3;a=a<<4;后,a=48; 如果左移时被舍弃的高位中不包含1,则左移1位 相当于乘以2(扩大2倍);如1100 0000<<2后变 为0000 0000,被舍弃的高位中含有1,因此虽左 移2位,值并没有扩大4倍。而0011 0000<<2后变 为1100 0000;被舍弃的高位中不包括1,所以值 扩大4倍
Typedef练习:
④ 定义长度为100的整型数组int a[100];的类型别名为 NUM ;并用 别名定义一个数组变量n; ⑤ 定义字符指针 char *ss的别名为 STRING ;并用别名定义两个字符指 针变量p,q。
2013-7-30 9
typedef举例:



typedef int INTEGER; INTEGER i,j;--基本类型 typedef float REAL; REAL a,b; --基本类型 typedef struct(union) ---结构体(共用体) {int month,day,yesr;} DATE; DATE birthday,*p; typedef enum date={year,month,day} DATE; DATE a=month,b=year; typedef int NUM[100]; NUM n; --数组 typedef char *STRING; STRING p,s[10]; --指针 typedef int (*POINTER)(); POINTER p1,p2;--函数指 针
2013-7-30 6
用typedef说明类型的步骤
1) 先用定义变量的方法写出定义体。 2) 把变量名换成新类型名。 3) 在最前面加上typedef。 4) 已定义完新类型名,可用此新类型 名去定义变量。
2013-7-30
7
练习
① 定义float类型的别名为 REAL;并用别名 定义两个变量a,b; ② 定义结构体struct {int month,day,yesr;} 的类型别名为DATE;并用别名定义结构 体变量birthday. ③ 定义枚举 enum date={year,month,day} 的类型别名为 DATE;并用别名定义两个 枚举变量a=month,b=year;
如果进行初始化,后面的枚举常量会以初始化的值 进行递增,直到遇到另一个枚举常量初始化为止。
枚举类型变量的定义


方法一:enum 枚举类型名 变量名表; Enum week w1,w2; 方法二:定义类型的同时定义变量 enum [week] { Sun, Mon, Tue, Wed, Thu, Fri, Sat }w1,w2;
格式: typedef 类型名 标识符; 含义:定义标识符是类型名的别名 typedef int INTEGER; INTEGER a,b,c;作用与int a,b,c;一样
枚举编程举例
口袋中有红、黄、蓝、白、黑5种颜色 的球若干个。每次从口袋中先后取出3个球, 问得到3种不同颜色的球的可能取法,输出 每种排列的情况。 球只能是5种色之一,而且要判断各球 是否同色,应该用枚举类型变量处理。 设取出的球为i,j,k。根据题意,i、j、k 分别是5种色球之一,并要求i!=j!=k。可以 用穷举法,即一种可能一种可能的试,看 哪一组符合条件。
2013-7-30 16
五. sizeof 运算符
格式:sizeof (表达式或数据类型) 功能:求运算对象在内存中所占的字节数
求: printf(“%d,%d\n”, sizeof ( int ), sizeof ( char ) );
结果:2,1 结果:10
求:printf("%d", sizeof("AST\n012\12\\"));
2013-7-30
18
运算符的优先级
括 号 ( ) [ ] . ->
单目运算 ! ~ & * - ++ --
算术运算 * / % + 位 << >>
位& | ^
关系运算 > >= < <= 逻辑运算 && | | 条件运算 ? : 赋值运算 =
== !=
2013-7-30
逗号运算 ,
19
§5 本章小结
枚举定义
枚举定义:变量的取值是有限的、固定的; 如一周只有七天,一年只有十二个月。枚 举是一个整型符号常量的集合。 枚举值默 枚举类型定义: 认值从0

如:
enum 枚举类型名 { 枚举值表 } ; 开始递增
enum week { sun, mon, tue, wed, thu, fri, sat }; enum week { sat=6,sun, mon=1, tue, wed=5, thu, fri};
2013-7-30 11


位运算 共有六种运算符
位运算符
功能
优先级
结核性
>> << & ∧ ¦ ~
按位右移(双目) 按位左移(双目) 按位与 (双目) 按位异或(双目) 按位或 (双目) 按位反 (单目)
11 11 8 7 6 14
(→) (→) (→) (→) (→) (←)
注意:1.位运算是对二进制的位进行运算 2.只能对int型、char型和long型进行位运算
x
¦0000 1010 = 1111) ¦0000 0001 = 1011)
13 (0000 0111 ^ 0000 1010 = 1101) x^y= ~x = –8 ( ~ 0000 0111 ) = 1111 1000 – x = –7 x<<2 = 28 (0000 0111 << 2 = 0001 1100) 2 (0000 1010 >> 2 = 0000 0010) y>>2 = 1 (0000 0111 >> 2 = 0000 0001) x>>2 =
相关文档
最新文档