运算符

来源:互联网 发布:大数据的发展图片 编辑:程序博客网 时间:2024/06/05 14:54

前日内容回顾:
类型说明符:
整形: int ,short, long
浮点: float, double,
字符: char,
有符号:signed,
无符号:unsigned;
定义常量时: const
字节运算符: sizeof
空类型: void

格式控制符:
%d,%hd,%ld;
%f,%lf,
%c,
%u,

数据类型的转换:
隐式转换:
1,在参与运算时,字节数少的遇到字节数大的数据时,会自动转化成为字节数大的类型.
比如:int遇到float时会转化成float,最终结果也是float型数据.
2,当发生赋值操作时,等号右边的数据类型会自动转化成等号左边的主句类型.
比如:int a = 1.3,打印a时将得到1;
unsigned short a = -1; 打印a时将得到65536;

强制转换:(类型说明符)表达式
3 / 1.5 = 2.000000(此时3发生隐私转化,变为3.000000)
3 / (int)1.5 = 3 (1.5被强制转化成了1)
(int)(3/1.5f) = 2 (此时表达式3/1.5f的结果2.00000被强制转化成了2)

精度缺失:
发生在大字节数据类型转化为小字节数据类型的时候
-1;
unsigned short a = -1; //11111111 11111111
char b = a;
printf(“%d”,b); //11111111 127

算数运算符:+,-,*,/,%,++,–
23 % -7 = 2
-13 % 4 = -1;
-33 % 11 = 0;
22 % -11 = 0;
-97 % -32 = -1;


————————–今日内容:———————————–

查看内存的方式:
1.打断点
2,开始调试
3,调试>>窗口>>内存
4,输入打印的数据地址
5,按f10是逐条运行

“&” 叫取地址符;
打印地址的方式printf(“%p”,&变量名),例如:
int a = 0;
printf(“%p”,&a); //07fc67b4(物理地址)

再次强调:计算机存储的数据的补码;

—————???明天早上点人演示内存的查看方法???—————–

++自增运算符 等同于 + 1;
–自减运算符 等同于 - 1;
都是配合变量来使用,
可以作为前缀,如:int a = 10;++a;
也可以作为后缀,如:int b = 20;b++;
—————???区别是什么???————————————-
做前缀时,是先自增(或自减)再参与运算;
做后缀时,是先参与运算后自增(或自减);

int a = 3,b=4;
b = a+++b; //-a++;
计算机会讲上述表达式解读为 b = (a++) + b;最终结果a = 3,b = 7;
————–???为什么不是b = a + (++b)???————————-

“贪心法”,当我们计算机在遇到符号时,在合法的情况下总是尽可能多的读取;

赋值运算符: = 等号左边叫左值,右边叫右值.左值是可以修改的值,即程序中的变量.
int a = 3;
a = 4; //合法
//a = 4; //合法
//a++ = 4; // 不合法
//-a = -4; //不合法
//a + 4 = 7; //不合法
//(a++)++; //不合法
//-(a–) = -3; //不合法

搞清楚表达式跟变量的区别,表达式是一个值,可以有变量参与在其中.

符合赋值运算符: +=,-=,*=,/=,%= 说白了就是简写.
如:
int a = 3;
a += 1; >> a = a + 1; >> ++a ;
a %= 7; >> a = a%7 a = 3;
printf(“%d”,a);

a += 2; //3
a -= 7; //-4
a *= 2; //6
a /=2; //1
a %= 2; //1

符合赋值运算的嵌套: 自右向左结合;
如:
int a = 3;
a += a -= a *= a /= a %= a*a;

//展开后:
a = a %(a * a); //a = 3;
a = a / a; //a = 1;
a = a * a; //a = 1
a = a - a; //a = 0
a = a + a; //a =0

printf(“a = %d”, a); //a = 0

逗号运算符,与逗号表达式:
逗号表达式的值,等于最后一个逗号后面的表达式的值.
如:
a=3,a+=2,a*=3; // a = 15 整个表达式的值 = 15

如:
int a = 0,b = 0;
b = (a = 3, a += 2, a *= 3,a %= 2);
展开:
a = 3;
a = a + 2;
a = a * 3;
a = a % 2;
b = a;
printf(“a = %d,b = %d”, a, b); //a = 1 整个表达式的值 = 1

关系运算符:
大于>,
小于<,
大于等于>=,
小于等于<=,
不等于!=,
等于==
说白了就是比较和判断

注意,注意,注意,千万不要把”==”写成”=”;

在C语言中.一般情况下,逻辑上的”真”-true,在数值上等于1,”假”-false,等于0;

int a = 2, b = 3,c = 0;
c = (a < b); //此时等号右边的关系运算表达式的结果为真,所以值为1;
printf(“c = %d”, c); //c = 1;

有趣小例子:
int a = 2, b = 3,c = 4,d = 0;
d = (a < c < b);
printf(“d = %d”, d);
—————–???最终结果 d = 1 为什么???———————-

优先级的问题:
int a = 2, b = 3,c = 4,d = 0;
(a = b) < (c + d);
printf(“a = %d”, a); //a = 3;

如果改成:
a = b < (c + d);
结果是:a = 1;

因为 “<”优先级比”=”优先级要高,而”()”的优先级比”<”高.

原创粉丝点击