加强公司网站平台建设的意义,网页翻译在哪,桂林网站优化,网站建设企业如何为公司建设文章目录 了解什么是操作数、操作符操作数#xff1a;操作符 操作符详解#xff1a;1.算术操作符#xff1a; 、- 、* 、/ 、%2.移位操作符: 3.位操作符: | ^4. 赋值操作符: 、 、 - 、 * 、 / 、% 、 、 、 、| 、^5. 单⽬操… 文章目录 了解什么是操作数、操作符操作数操作符 操作符详解1.算术操作符 、- 、* 、/ 、%2.移位操作符: 3.位操作符: | ^4. 赋值操作符: 、 、 - 、 * 、 / 、% 、 、 、 、| 、^5. 单⽬操作符 、、--、、*、、-、~ 、sizeof、(类型)6.关系操作符: 、 、 、 、 、 !7. 逻辑操作符 、||8. 条件操作符 ? :9. 逗号表达式 ,10. 下标引⽤ []11. 函数调⽤ ()12.结构体成员访问符 操作符的优先级与结合性优先级结合性 优先级与结合性表整形提升算术转换 了解什么是操作数、操作符
操作数 操作数是用于运算的数字或者表达式 如 1 . 11 2.ab*3
操作符 操作符,也称运算符。是对数据进行操作处理的符号。 操作符有很多,常见操作符有:单目操作符、算数操作符、移位操作符、位操作符、赋值操作符、关系操作符、逻辑操作符、条件操作符、逗号表达式、下标引用、函数调用和结构体成员。 操作符详解
1.算术操作符 、- 、* 、/ 、% 、- 、* 、/ 、% 这些算术操作符分别对应数学上的加、减、乘、除、取余数 如
int main() {int a 10, b 4;printf(ab%d\n, a b);//加printf(a-b%d\n, a - b);//减printf(a*b%d\n, a * b);//乘printf(a/b%d\n, a / b);//除printf(a%b%d\n, a %b);//取余数return 0;
}运行结果 注除号 / 因为求的结果是整数舍掉小数点后面的数所以10/42
2.移位操作符:
这我在之前的文章讲过这里放个链接需要的可以去看看哦http://t.csdnimg.cn/JL6ao
3.位操作符: | ^
这我在之前的文章讲过这里放个链接需要的可以去看看哦http://t.csdnimg.cn/JL6ao
4. 赋值操作符: 、 、 - 、 * 、 / 、% 、 、 、 、| 、^
赋值操作符 当我们要对变量初始化时或者给变量赋一个值时就可以使用注这不是我们数学上的等于号噢 如
int main() {int a 10;//初始化,将10赋给aint b;b 20;//赋值将20赋给bprintf(a%d b%d, a,b); return 0;
}运行结果 连续赋值 如
int main() {int a,b;a b 10;//将10赋给b再将b赋给aprintf(a%d b%d, a, b);return 0;
}运行结果 注意的是在初始化时不能进行连续赋值 如int a b 10;//err 运行会报错如 复合赋值 就是将原来运算的过程简化如
int main() {int a 10;int b 20;a b;//等于abprintf(%d, a);return 0;
}运行结果 不仅能和 还能和 -、*、/等操作符一起复合使用
5. 单⽬操作符 、、–、、*、、-、~ 、sizeof、(类型) 在c语言中规定0为假非0为真! 逻辑取非运算符在判断条件时使用如真 那么它的结果就为假 如
int main() {int a 1;if (!3) {printf(a为0);}elseprintf(a不为0);return 0;
}运行结果 分为前置和后置 区别前置是先1再使用后置是先使用后 如
int main() {int a 2;int b 2;printf(a%d\n, a);//后置先使用所以这里a的值不变 打印 a2printf(b%d, b);//前置先1后使用所以这里打印b3return 0;
}运行结果 ** – ** –分为前置–和后置– 区别前置–是先-1再使用后置–是先使用后– 如
int main() {int a 2;int b 2;printf(a%d\n, a--);//后置--先使用所以这里打印 a2printf(b%d, --b);//前置--先-1后使用所以这里打印b1return 0;
}运行结果 取地址操作符 用于取变量在内存中的地址 如
int main() {int a 10;printf(%p, a);//取出a的地址%p用于打印地址return 0;
}运行结果
解引用操作符 * ) * 用于指针 放在指针变量的前面如*p*p通过指针变量p中存放的地址找到指向的空间 如
int main() {int a 10;int* p a;*p 5;//通过解引用符来找到p指向的空间此时*pa改变*p即改变aprintf(a%d, a);return 0;
}运行结果 、- 这个并不是算术运算符的 、 -而是取正负的操作符正、-负。 如
int main() {int a 10;printf(a%d\n, a);//a不变printf(-a%d\n, -a);//a等于-10return 0;
}运行结果 ~按位取非 运算规则:将一个操作数全部取反在二进制的基础上取非不懂原码、反码、补码、进制的可以看看这个链接的内容http://t.csdnimg.cn/JL6ao 如将int a1取反 sizeof 计算变量的所占内存空间大小单位是字节如果操作数是类型的话计算的是使用类型创建的变量的所占空间的大小 如
int main() {int a 10;int arr[10];printf(%d\n, sizeof(a));//变量printf(%d\n, sizeof(int));//类型printf(%d\n, sizeof(arr));//在计算数组大小时在输入数组名即可return 0;
}int类型的字节大小为4字节arr[10],为10个int型的数据所以为40
(类型) 强制类型转换如int9.8将浮点数转化为整数 如
int main() {double a 9.8;printf(%d\n,(int)a);//return 0;
}运行结果 转化之后舍掉小数
6.关系操作符: 、 、 、 、 、 ! . 、 、 、 、 、 !这些符号分别是大于、大于等于、小于、小于等于、等于、不等于 注意、这两是规定的写法不要写成、这种形式 主要用于判断表达是的真假 如
int main() {int a 0, b 10;if (ab) {//这里b大于a表达式为真执行下面语句printf(ab);}return 0;
}运行结构
7. 逻辑操作符 、||
逻辑与操作符 1.简单来说就是并且的意思判断两个表达式若都为真则为真有一个或者都为假则为假 2.有个特点就是当判断第一个表达式为假时就不会判断后面的了直接判断为假 如 int main() {int a 0, b 2;if (a b) {printf(yes);}elseprintf(no);return 0;}运行结果 这里a0当判断a0时就不会去判断b了这里直接就为假了 逻辑或操作符 || 1.可以简单理解为或者判断两个表达式中有一个为真则为真当两个表达式都为假时才判断为假 2.当判断第一个表达式为真时就不会判断后面的表达式了直接判断为真 如
int main() {int a 0, b 2;if (b || a) {printf(yes);}elseprintf(no);return 0;
}运行结果 这里当判断b为真时就不会进行后面的判断了直接判断为真
8. 条件操作符 ? :
条件操作符 1.? : 为三目运算符 2. 格式int c (a b)?a:b;//(表达式1)表达式2表达式3 3.当表达式1为真时就会执行表达式2当表达式1为假时就会执行表达式3 如
int main() {int a 0, b 2;int c (a b)?a:b;//(表达式1)表达式2表达式3printf(%d, c);return 0;
}运行结果 这里表达式1为假所以执行表达式3将b赋给c
9. 逗号表达式 ,
逗号表达式 1.格式 c int d a, b, c;//()表达式1表达式2表达式3......,已最后一个为标准 2.逗号表达式就是⽤逗号隔开的多个表达式。 3.逗号表达式从左向右依次执⾏。整个表达式的结果是最后⼀个表达式的结果。 如 i
nt main() {int a 0, b 2;int c 10;int d (a,bab, cb);//a,a1,bab3,cb13, d13printf(%d, d);return 0;
}运行结果
10. 下标引⽤ []
下标引⽤ 1.格式 arr [ a ]//arr为数组名a为下标索引值 2.用于找到数组具体位置的值 如
int main() {int arr[] { 1,2,3 };printf(%d, arr[1]);//arr[1]2;return 0;
}运行结果
11. 函数调⽤ ()
函数调⽤ 1.接受⼀个或者多个操作数第⼀个操作数是函数名剩余的操作数就是传递给函数的参数。 2. add()//add函数名为第一个操作数里可以放0个或者多个操作数参数 如
int add(int x, int y) {return x y;
}
int main() {int a 10;int b 5;int c add(a, b);//add,a,b都为操作数printf(%d, c);return 0;
}运行结果
12.结构体成员访问符
直接访问: . 格式结构体名 . 成员名 p.a 如
struct tag {int a;int b;
};
int main() {struct tag p { 5,10 };printf(a%d b%d, p.a,p.b);return 0;
}运行结果 间接成员访问符- 1.有时候我们得到的不是⼀个结构体变量⽽是得到了⼀个指向结构体的指针,这时就要用到 - 2.格式结构体指针-成员名 p1-a 如
struct tag {int a;int b;
};
int main() {struct tag p { 5,10 };struct tag* p1 p;printf(a%d b%d, p1-a,p1-b);return 0;
}运行结果 13.圆括号 将括号内的看成一个整体先算完括号内在算其他在不确定优先级时可以用 操作符的优先级与结合性
优先级 简单来说就是先运算那一部分和我们学的加减乘除意思差不多在有加法和乘法的情况下先算乘法再算加法 如
int main() {int a 10, b 2;int c b -a * b;//这里有 -负号 * 三种运算符printf(c%d ,c);return 0;
}因为 优先级 -负号 * 所以先算-a-10再-10 * b-20,最后再加2所以c-18 运行结果
结合性 简单来说就是操作数与操作符之间谁和谁先在一起分为自左向右和自右向左两个方向 如
int c a b;是左向右结合先跟a结合在与b赋值运算符是右向左结合先跟ab结合再与c结合
优先级与结合性表 规律 优先级有上到下递减
整形提升
什么是整形提升 1.C语⾔中整型算术运算总是⾄少以缺省整型类型的精度来进⾏的。 2.为了获得这个精度表达式中的字符和短整型操作数在使⽤之前被转换为普通整型这种转换称为整型提升。 意义 1.表达式的整型运算要在CPU的相应运算器件内执⾏CPU内整型运算器(ALU)的操作数的字节⻓度⼀般就是int的字节⻓度同时也是CPU的通⽤寄存器的⻓度。因此即使两个char类型的相加在CPU执⾏时实际上也要先转换为CPU内整型操作数的标准⻓度。通⽤CPUgeneral-purpose CPU是难以直接实现两个8⽐特字节直接相加运算虽然机器指令中可能有这种字节相加指令。所以表达式中各种⻓度可能⼩于int⻓度的整型值都必须先转换为int或unsigned int然后才能送⼊CPU去执⾏运算。 2.通过整形计算完后会进行截断 3.有符号和无符号在一起时有符号转为无符号计算 4.char、short转为int计算就算完后截断 如何提升 有符号整数提升是按照变量的数据类型的符号位来提升的⽆符号整数提升⾼位补0 如
int mian() {char a -1;//有符号unsigned char b -1;//无符号printf(a%d\nb%d, a, b);return 0;
}char a1
unsigned char b -1
运行结果 再如 char a1 char b-2计算ab int main() {char a 1;char b -2;unsigned char c a b;printf(ab%dc%d, a bc);return 0;
}运行结果 short也是如此感兴趣的可以去试试
算术转换 如果某个操作符的各个操作数属于不同的类型那么除⾮其中⼀个操作数的转换为另⼀个操作数的类型否则操作就⽆法进⾏。下⾯的层次体系称为寻常算术转换。 long double
double
float
unsigned long int
long int
unsigned int
int如果某个操作数的类型在上⾯这个列表中排名靠后那么⾸先要转换为另外⼀个操作数的类型后执⾏运算 如
int main() {double a 9.8;int b3;printf(%lf, a b);return 0;
}运行结果
这里打印double类型的数所以编译器会将a转为double类型的计算
以上就是我的分享了如果由有错误的地方欢迎在评论区留言 最后 谢谢大家的观看