C++程序设计基础知识之二

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(4) 位操作运算符(字位运算符)
C++语言中的位操作运算符是针对char或int中的位(bit) 进行测试、置位或移位处理。位操作不能用于 float、double、 long、void或其它复杂类型。
& | ^ ~ >>
位与 位或 位异或 位非 右移
<<
左移
(1) 位与运算& 应用a:利用位与运算可以实现数据筛选。 例:设屏蔽字为0xF0,试求对数据01101101的筛选值。 01101101 & 11110000 屏蔽字 01100000 应用b:(&11011111)实现将小写字母转换成大写字母。
(3)逗号运算符 它也是C++语言提供的一种特殊的运算符,逗号运算的一般形 式为: 表达式1,表达式2; 逗号表达式的求解过程是:先求表达式1,再求解表达式2。 整个逗号表达式的值是表达式2的值。 例如: 例如: 3 + 5, 6 + 8; a = 3 * 5, a * 4; (a = 3 * 5, a * 4), a + 5; 表达式的值为:14 表达式的值为:60 表达式的值为:20
(6)其它运算符 (a)条件运算符 它是C++语言中的唯一个三目运算符;表示形式为: E1 ? E2 : E3 含义是:先计算表达式E1的值,如果为TRUE,则结果为 表达式E2的值; 否则结果是表达式E3的值。例如: x = 10; y = x > 9 ? 100 : 200; cout<<(x > y ? “x > y” : “x <= y”)<<’\n’;
(1) 算术运算符
注意: (1): “/”包括浮点除和整数除两种运算,用于整数除法时,结 果是整数;除数和被除数只要有一个是浮点数,则进行浮点 数相除。
例如:
5/2 = 2; 1/2 = 0;而 5.0/2 = 2.500000;
(2): “%”模运算取整数除法的余数,所以“%”不能用于float 和double型。 例如: 2%5 = 2; 5%2 = 1; 5%10 = 5; 5%4 = 1; 10%5 = 0; 5%3 = 2; 1%2 = 1; 7%2 = 1; 7%7 = 0; 7%4 = 3;
算术/逻辑左移: 算术右移: 逻辑右移:
循环左移位:
注意: (1)在缺省模式下,系统的移位操作是算术移位。因此, 逻辑和循环移位必须编程实现。 (2)在没有发生溢出条件下,左移1位等价于乘以2;右 移一位等价于除以2;
(5) 赋值运算符
C++语言中,将赋值作为一种运算,因此定义了赋值运算赋。
运算符 += -= 名称 加赋值 减赋值 例 a+=b a-=b 等价 a=a+b a=a-b
例如: 若x为实型变量且值为3.6,在执行 int i; float x = 3.6; i = (int)x; 后得到一个整数3,并把它赋给整形变量i, 但x仍 为实型,值仍为3.6;
前缀式:先增值后引用; 例如: x = 10; y = ++x; 结果为:y =11; x=11;
后缀式:先引用后增值; x = 10; y = x++; y=10; x=11;
(3) 关系与逻辑运算符
关系与逻辑运算符 概念中的关键是 TRUE(真)与 FALSE(假)。在 C++语言中,逻辑 上非“0”即TRUE, “0”为FALSE; #define FALSE 0 #define TRUE 1
解密过程
注意:逻辑运算的结果不是“0”就是“1”,而与之相似的位 运算结果可以为任意值。
(5) 移位运算符*
在C++语言中“>>”表示右移移位运算,“<<”表示左 移移位运算;另外在C++语言中“>>”和“<<”还分别用来表 示输入和输出操作。移位运算又可分为算术移位、逻辑移位 和循环移位。
CF 高位 低位 CF CF
C++程序设计 基础知识之二
1.6.2 基本运算符及其表达式
在C++中,运算符分为四大类:算术运算符、关系与 逻辑运算符、位操作运算符和赋值运算符。另外,还有一 些特殊的运算符用来完成一些特殊的任务。在运算中对一 个操作数进行运算称为单目运算,对两个操作数进行的运 算称为双目运算,在C++中只有一个三目运算。
已知:a <=> 61h , A <=> 41h
01100001 & 11011111 01000001
a
A
(2) 位或运算 | 利用位或运算可以实现将大写字母转为小写字母。 例如将字母A和0x20求位或
01000001 | 00100000 01100001
A
a
(3) 位非运算(~)
对同一数连续进行两次求非运算,可以得到原来的数, 因此,第一次求非的过程称为对数据的编码,第二次求非称 为解码。例如: x: 00101101 ~x: 11010010 ~~x: 00101101
int i; float f; char ch; (1) ch = i; (2) i = f; (3) f = ch; (4) f = i; 解释: (1 )行整型变量i赋给字符型变量ch,由于int型有2字节, char仅有1字节,因此,在赋值 过程中只将int的低8位送给 char,高8位丢失。如果i是0~255之间的数,那么ch与i的值相 同,否则ch的值仅取i的低字节。 (2)行int i只接受float f中的整数部分。 (3)行f将ch所对应的8位整数值转换为等值的浮点数。 (4) 行f将i的16位整数转换为等值的浮点数。
赋值转换表
目标类型 char char char int 表达式类型 short int int long int long int 可能丢失的信息 高8位丢失 高位丢失 高24位丢失 高16位丢失
int
float double
float
double long double
小数部分和可能更 大部分
赋值转换的3点注意: 1.int到float,或float到double等的转换不增加精度或准 确度,仅改变值的表现形式。 2.在将char类型转换为int或float时,一般编译系统对 char变量值大于127时,作为负数处理。(也有例外) 3.高数据类型向低数据类型转换时,可能丢失部分信 息。
2.2.3 数据类型转换 C++语言允许数据值从一种类型转换成另一种数据类型, 可分为隐式转换和显示转换两种。 (1)数据类型的隐式转换 数据类型的隐式转换又称自动转换,包括表达式转换、 赋值转换和输出转换。
赋值转换规则:当赋值语句中出现类型转换时,赋值语句右 边的值被自动转换成左边的值的数据类型;
按精度截断结果 按精度截断结果
表达式转换规则:当不同类型的常量和变量混于同一表 达式中时,编译程序将所有操作数变换为与最大类型操 作数相同的数据类型。 例如:char ch; int i, result; float f; double d; result = (ch / i) + (f * d) – (f + i); int double float
结果为输出:x <= y;
(b) sizeof运算符 sizeof是一个单目运算符,又称为编译时运算符,它的格式如 下: sizeof(表达式); sizeof(数据类型); 它的作用是返回括号中的表达式或数据类型的字节长度。 例如: sizeof(float); sizeof(int); sizeof(char); sizeof(x=2);
*=
/= %= &= |= ^= >>=
乘赋值
除赋值 余赋值 位与赋值 位或赋值 位异或赋值 右移赋值
a*=b
a/=b a%=b a&=b a|=b a^=b a>>=b
a=a*b
a=a/b a=a%b a=a&b a=a|b a=a^b a=a>>b
<<=
左移赋值
a<<=b
a=a<<b
例:用移位运算实现乘法和除法运算 #include <iostream.h> 程序运行的结果为: void main(void ) { signed int num1= 15; 15 multiplied by 16 is 240 signed int num2 = -15; -15 divided by 8 is –2 unsigned int num3 = 15; 15 multiplied by 4 is 60 unsigned int num4 = 0x8000; 0x8000 divided by 2 is 4000. num1 <<= 4; num2 >>= 3; num3 <<= 2; num4 >>= 1; cout<<"15 multiplied by 16 is "<<num1<<endl; cout<<"-15 divided by 8 is "<<num2<<endl; cout<<"15 multiplied by 4 is "<<num3<<endl; cout<<"0x8000 divided by 2 is "<<hex<<num4<<endl; return; } -15的原码:10001111; 补码:11110001; 右移3位后:11111110; 表示为原码后为:10000010;= -2;
(2) 增量与减量运算符
C++语言中有两个运算符,在其它计算机语言中很少见, 即增量和减量运算符 ++、--;它们只能用于整数操作。 ++:是操作数自加1; --: 是操作数自减1;
例如:x = x +1; 等同于:++x; 或 x++; x = x – 1; --x; x--;
注意:在表达式中增量和减量操作符放在操作数之前与之 后是有区别的。放在操作数之前表示先执行加1或减1操作, 然后引用操作数。放在操作数之后则表示先引用操作数, 再进行加1或减1操作。
注意: (1)在进行关系运算时TRUE=1,FALSE=0; 在进行逻辑判断时TRUE=非零,FALSE=0; (2)所有的关系与逻辑表达式产生的结果不是TRUE就是 FALSE; (3)关系与逻辑运算符的优先级比算术运算符低。
例如: int x; x = 100; cout<<( x>10); 结果为:1 if(-1 && 8) cout<<"TRUE = "<<(-1&&8)<<endl; 结果为:TRUE=1;
(4) 位异或运算(^)
两个逻辑变量A和B,异或运算的真值表为: 可以描述为:相同为0;相异为1;
利用位异或运算Байду номын сангаас样可以实现对数据的编码和解码, 并且具有更好的保密特性。例如:
x= y= 00101100 01010101 (密匙)
z = x^y
w = z^y
01111001
00101100
加密过程
double
int
double
2.7.2数据类型的显式转换(强制转换)
显式转换:作用就是将一个类型的变量强制转换为另 一种类型。实际上它也是一种单目运算。各种数据类型的 标识符都可以用作显式转换运算符,但必须用圆括号把类 型标识符括起来。 一般形式为:(数据类型)表达式; 例如: (char)(3 – 3.14159 * x); (int)(3.6 + 7.2); (int)x; 应当注意:对一个变量进行数据类型的显式转换后,得到 一个新的类型的数据,但原来变量的数据类型不变。
相关文档
最新文档