详解操作符(中)

简介: 详解操作符(中)

6 单目操作符

a+b,+就是一个双目操作符,因为+两边都有数值,单目操作符就是操作符仅一个操作数

 

逻辑反操作(!):在C语言中,0表示假,!0表示真  。例如:10表示真,则!10输出的就是0。

此时友友们就会想,!0会不会就是任意一个数值,答案是不是的,!0的值是固定的,是1。

(! 真变成假,假变成真)

正值(+),负值(-),一个数a=10,那么+a就是10,-a就是-10;一个数b=-10,那么+b就是-10,-b就是10。

知识点:

abs(对整数取绝对值)   fabs(对小数取绝对值)#include <math.h>

取地址符号(&),取地址用的,可以知道储存在内存中的地址。

操作数的类型长度(以字节为单位)(sizeof):计算的是变量或者类型所创建变量占据内存的大小。

上图中把a去掉,就是类型,sizeof(类型)也可以。int arr[10]呢?答案是也可以的

sizeof(类型)括号不可以省略,变量可以 但是中间需要一个空格

对一个数的补码的二进制按位取反(~)(0变成1,1变成0),打印的是原码

0的原码反码补码都是000000000000000000000000000000000

给一个数10 ,  00000000000000000000000000001010,把倒数第三个0变成1,这个数按位或0000000000000000000000000000000100(也可以表示成1<<2)即可变成000000000000000000000000000001110

现在倒回去,把00000000000000000000000000001110的倒数第三个数字变成0,这个数按位与11111111111111111111111111011(按位取反 1<<2)即可

前置、后置++  前置后置--

前置++:先++,后使用         后置++:先试用,后++

++a,那么结果都是11

*间接访问操作符(解引用操作符)

1. #include <stdio.h>
2. int main()
3. {
4.  int a = 10;//在空间内存创建一个变量a,内存的地址叫做m,
5.  int* pa = &a;//指针变量int*   创建一个变量pa存放地址m
6.  *pa = 20;//通过指针找到a,用*pa,改变pa的值就是改变a的值
7.  printf("%d ", a);
8.  return 0;
9. }

*pa就是a,&*pa与&a相同。(不管什么元素的指针,它的大小4个字节就是8个字节,例如:不在主函数内的sizeof(ch)的值为4/8.。,char  ch[10] ={0}, (×86环境——32个字节——4个字节)(×64环境——64个字节——8个字节))

强制类型转换(类型):例如,3.14是一个double类型数字,把它转换成int类型,即 (int)3.14

int b =  3.14会报错 ,为了不报错加上(int)

7 关系操作符

这个就比较简单了,就是大于,大于等于,小于,小于等于,不等于,等于(注意,判断相等,用两个等号)

8 逻辑操作符

按位与和按位或 关注二进制,   逻辑与和逻辑或只关注真假

1<a<5 这样写是错误的,如果a = 2,1<2为真,就为1,1<5为真。

因为a++为后置++,a++为1,a为2,所以逻辑或,一真就全部为真,所以++b,d++并没有计算,所以b和d仍然为2,4.所以a b c d为2 2 3 4.

总结:

&&左操作符为假,右边不计算                         || 左操作为真,右边不计算

9 条件操作符

这个操作符也叫三目操作符

条件操作符就是简化if语句。exp1为真,就输出exp2, exp1为假,就输出exp3.

if语句

简化if语句

10 逗号表达式

逗号表达式,就是用逗号隔开的多个表达式。

逗号表达式会从左向右依次计算,整个逗号表达式的结果是最后一个表达式的结果。

if(a >b,c = b/2,d > 0)   这个语句中起作用的是d > 0.

11 下标引用、函数调用和结构成员

11.1 [ ] 下标引用操作符

操作数:一个数组名+一个索引值

int arr[ 10] = { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n",arr[7]);

上面的[ ]就是下标引用操作符,arr ,7 就是操作数

arr数组首元素地址,arr+7就是第8个元素的地址,*(arr+7)就是arr[ 7 ],*(arr+7)可以写成*(7+arr),那么就可以写成7[ arr ].

11.2 ( )函数调用操作符

test( )中的 函数调用操作符,在函数那个章节有详细说明,在这里就不赘述了

11.3 访问一个结构的成员

.    结构体.成员名

->  结构体指针->成员名

1. #include <stdio.h>
2. struct Stu
3. {
4.  char name[20];
5.  int age;
6.  double score;
7. };
8. int main()
9. {
10.   struct Stu s = { "zhangsan", 20, 85.5};
11.   printf("%s %d %.1lf\n", s.name, s.age, s.score);//结构体变量.结构体成员
12.   struct Stu* ps = &s;
13.   printf("%s %d %.1lf\n", (*ps).name, (*ps).age, (*ps).score);
14.   printf("%s %d %.1lf", ps->name, ps->age, ps->score);//结构体指针->结构体变量
15.   return 0;
16. }

相关文章
|
6月前
|
存储 C++
C/C++中位操作符(&,|,^,~)的详解使用
C/C++中位操作符(&,|,^,~)的详解使用
|
编译器 C语言 索引
操作符详解下(非常详细)
操作符详解下(非常详细)
47 0
|
1月前
操作符详解
操作符详解
9 0
|
4月前
|
SQL 数据库
BETWEEN 操作符
【7月更文挑战第15天】BETWEEN 操作符。
40 3
|
5月前
|
编译器 Linux C语言
操作符详解(2)
操作符详解(2)
46 0
|
6月前
|
编译器 C语言 C++
操作符详解2(二)
本文介绍了编程中的操作符转换和表达式解析规则。当操作数类型不同时,会进行寻常算术转换,按照long double、double、float等类型顺序进行向上转换。表达式求值时,虽然操作符有优先级,但不能决定操作数的求值顺序,例如`a*b + c*d + e+f`中乘法先于加法,但具体计算顺序不确定,可能导致不同结果。同样,如`c++ + c--`这样的表达式也是有歧义的,因为++和--的左右结合性不能确定操作数的获取顺序。文章强调,复杂的表达式可能因编译器差异产生不同结果,应避免使用可能导致非唯一计算路径的表达式以减少潜在风险。
42 0
|
6月前
|
存储 程序员 C语言
操作符详解1(二)
该内容是一个关于C语言操作符和结构体的教程摘要。首先提到了加法操作符`+`的使用,并给出了一种不使用临时变量交换两个数的方法。接着讨论了如何计算整数的二进制表示中1的个数,通过位操作符实现。然后介绍了逗号表达式和函数调用操作符`()`,以及结构体成员访问操作符`.`和`-&gt;`,用于访问和修改结构体内的成员变量。文章以讲解结构体的声明、初始化和通过指针访问结构体成员为重点,展示了如何直接和间接地操作结构体数据。
45 0
|
6月前
|
编译器 索引
操作符详解3
操作符详解3
42 0
|
编译器 C语言 索引
S5——C操作符详解,你都知道吗? 下
讲解主要内容: 1. 各种操作符的介绍 2. 表达式求值 以下让我们开始正式重新认识和理解操作符吧!
|
11月前
|
存储 编译器
操作符详解(1)
操作符详解(1)
39 0