C之运算符与强制类型转换
2015-07-15 20:59
141 查看
注:本文做为自我复习反省所用,若各位大神察觉偶哪里有理解错误的地方,恳请斧正!在此衷心感谢各位大神!
一:C运算符共分为:单目/双目/三目
单目:运算量只有一个的运算符; +(正), -(负), ++(自加),--(自减),~(取反),!(非),×(取指向),&(取地址)
双目:运算量只有两个的运算符;
1,算数运算类: +(加), -(减) ,*(乘) , /(除), %(取余),
2,位运算类:|(或) , &(与), ^(异或),<<(左移),>>(右移),
3,逻辑运算类:&&(逻辑与),||(逻辑或),
4,关系运算类:<(小于),>(大于), >=(大于等于),<=(小于等于),!=(不等于),==(全等于),
5,赋值类: =(等于),+=(加等),-=(减等),*=(乘等),/=(除等);
三目:运算量有三个的运算符;? : (问号运算符)
运算优先级:三目 < 双目 < 单目
貌似有个口诀为:非 算 关 与 或 赋 逗
! 算数运算 关系运算 && || 赋值运算 ,
注:写代码时也可用括号来解决,先后顺序的忧伤 —____ —||
位运算
example:
int a = 0x00f0,b;
取反:
b = ~a; // b的值为0xff0f
左移:
b = a<<4; //b的值为0xf0f0
右移:
b = a>>4; //b的值为0x0ff0
位与:
b = a & 0xffff; //b的值为0xff0f
位或:
b = a | 0xffff; //b的值为0xffff
异或:
b = a ^ 0x0ff0 //b的值为0x0f00
自加自减
example:
int i,j;
j + i++ ; //i先参与运算后自加 ,自减同理
++j +i;//j先自加然后才参与运算,自减同理
j+++i;//j先参与运算后自加 ,自减同理
赋值运算
example:
int a,b ,c;
a = 9; // 赋值运算符的左边必须是变量切不能为表达式
a += 4;
/***********************************************/
a = b = c+5; //b不能为常量或表达式
三目运算:
example:
a ? b : c; //如果a的值为真,则表达式的值为b,否则表达式的值为c
逗号表达式
example:
int a,b,c;
(a = 3, b = 5, c = 8) //该表达式的结果为 8
逗号表达式的结果都取最后一个多好后面的表达式的结果;
二:强制类型转换
C语言中强制类型转换分为:显式转换与隐式转换
隐式转换:不同的数据类型进行运算时,计算机编译器会自动帮我们转换类型
example:
float a = 3.14;
int b = 4, c = 9;
b+c 的结果为int型
a+b的结果为float型,编译器会自动隐式的转换数据类型
数据类型转换表:
unsigned char
^
|
char->short->int->long->float->double
1:不同字节情况下 占字节数少的 向占字节数多的转化
2:同字节数的有符号向无符号的转换
3:整型向浮点型转换
显式类型转换:
int a = 8;
char b;
b = (char)b;
/**************************************************/
3/2 其结果为1 因为整型之间只有整除
3.0/2 其结果为1.5 因为2会隐式转换为float型参与运算
(float)3/2 其结果为1.5 因为先将3强制转换为float后,2也会隐式转换为float型参与运算
(float)(3/2)其结果为1.000000 该句为将3/2的结果强制转换为float
一:C运算符共分为:单目/双目/三目
单目:运算量只有一个的运算符; +(正), -(负), ++(自加),--(自减),~(取反),!(非),×(取指向),&(取地址)
双目:运算量只有两个的运算符;
1,算数运算类: +(加), -(减) ,*(乘) , /(除), %(取余),
2,位运算类:|(或) , &(与), ^(异或),<<(左移),>>(右移),
3,逻辑运算类:&&(逻辑与),||(逻辑或),
4,关系运算类:<(小于),>(大于), >=(大于等于),<=(小于等于),!=(不等于),==(全等于),
5,赋值类: =(等于),+=(加等),-=(减等),*=(乘等),/=(除等);
三目:运算量有三个的运算符;? : (问号运算符)
运算优先级:三目 < 双目 < 单目
貌似有个口诀为:非 算 关 与 或 赋 逗
! 算数运算 关系运算 && || 赋值运算 ,
注:写代码时也可用括号来解决,先后顺序的忧伤 —____ —||
位运算
example:
int a = 0x00f0,b;
取反:
b = ~a; // b的值为0xff0f
左移:
b = a<<4; //b的值为0xf0f0
右移:
b = a>>4; //b的值为0x0ff0
位与:
b = a & 0xffff; //b的值为0xff0f
位或:
b = a | 0xffff; //b的值为0xffff
异或:
b = a ^ 0x0ff0 //b的值为0x0f00
自加自减
example:
int i,j;
j + i++ ; //i先参与运算后自加 ,自减同理
++j +i;//j先自加然后才参与运算,自减同理
j+++i;//j先参与运算后自加 ,自减同理
赋值运算
example:
int a,b ,c;
a = 9; // 赋值运算符的左边必须是变量切不能为表达式
a += 4;
/***********************************************/
a = b = c+5; //b不能为常量或表达式
三目运算:
example:
a ? b : c; //如果a的值为真,则表达式的值为b,否则表达式的值为c
逗号表达式
example:
int a,b,c;
(a = 3, b = 5, c = 8) //该表达式的结果为 8
逗号表达式的结果都取最后一个多好后面的表达式的结果;
二:强制类型转换
C语言中强制类型转换分为:显式转换与隐式转换
隐式转换:不同的数据类型进行运算时,计算机编译器会自动帮我们转换类型
example:
float a = 3.14;
int b = 4, c = 9;
b+c 的结果为int型
a+b的结果为float型,编译器会自动隐式的转换数据类型
数据类型转换表:
unsigned char
^
|
char->short->int->long->float->double
1:不同字节情况下 占字节数少的 向占字节数多的转化
2:同字节数的有符号向无符号的转换
3:整型向浮点型转换
显式类型转换:
int a = 8;
char b;
b = (char)b;
/**************************************************/
3/2 其结果为1 因为整型之间只有整除
3.0/2 其结果为1.5 因为2会隐式转换为float型参与运算
(float)3/2 其结果为1.5 因为先将3强制转换为float后,2也会隐式转换为float型参与运算
(float)(3/2)其结果为1.000000 该句为将3/2的结果强制转换为float
相关文章推荐
- Linux C函数参考手册(PDF版)
- Lua教程(十七):C API简介
- C#实现打造气泡屏幕保护效果
- C/C++数据对齐详细解析
- C 语言基础教程(我的C之旅开始了)[三]
- C++中的extern “C”用法详解
- C 语言基础教程(我的C之旅开始了)[七]
- C字符串操作函数实现方法小结
- C/C++ 宏详细解析
- C/C++实现对STORM运行信息查看及控制的方法
- 用C#生成不重复的随机数的代码
- 在c和c++中实现函数回调
- 浅析C/C++中被人误解的SIZEOF
- C 语言基础教程(我的C之旅开始了)[六]
- C/C++实现的游戏角色名称名字随机生成代码
- C/C++函数调用的几种方式总结
- c/c++中变量的声明和定义深入解析
- 浅析c与c++中struct的区别
- 深入详解C编写Windows服务程序的五个步骤