嘉定区网站建设,做公司网站用什么系统,编程手机软件,有哪些网站可以做全屏代码#1024程序员节|征文# 这篇文章是对之前文章中操作符的补充#xff0c;可以看之前的文章#xff1a;C语言初阶#xff1a;六.算数操作_如何用编程表示除法-CSDN博客 C语言操作符是用于执行各种运算和操作的符号。包括算术操作符#xff08;如、-、*、/、%#xff09;#…#1024程序员节|征文# 这篇文章是对之前文章中操作符的补充可以看之前的文章C语言初阶六.算数操作_如何用编程表示除法-CSDN博客 C语言操作符是用于执行各种运算和操作的符号。包括算术操作符如、-、*、/、%用于基本数学运算关系操作符如、!、、、、用于比较两个值逻辑操作符如、||、!用于布尔逻辑运算位操作符如、|、^、~、、用于直接操作二进制位还有赋值操作符如、、-等用于给变量赋值。这些操作符是C语言编程的基础。
1. 操作符分类
算术操作符 移位操作符
位操作符 赋值操作符
单目操作符 关系操作符
逻辑操作符 条件操作符
逗号表达式 下标引用、函数调用和结构成员
2. 算术操作符 - * / % 1. 除了 % 操作符之外其他的几个操作符可以作用于整数和浮点数。 2. 对于 / 操作符如果两个操作数都为整数执行整数除法。而只要有浮点数执行的就是浮点数除法。 3. % 操作符的两个操作数必须为整数。返回的是整除之后的余数。
3. 移位操作符 左移操作符 右移操作符 注移位操作符的操作数只能是整数。 //2进制 //整数的2进制表示方式有三种 // 原码补码反码 //在内存中存储的是补码的二进制 //所以在参与移位的时候移动后都是补码 3.1 左移操作符
移位规则 左边抛弃、右边补0
int main()
{int a 10;int b a 1;//00000000000000000000000000001010 - a的补码进行左移printf(%d\n, a);printf(%d\n, b);return 0;
}
3.2 右移操作符
移位规则( 首先右移运算分两种)
1. 逻辑移位 左边用0填充右边丢弃
2. 算术移位 左边用原该值的符号位填充右边丢弃
int main()
{int a -1;//100000000000000000000000000000001 --原码//111111111111111111111111111111110 --反码//111111111111111111111111111111111 --补码//int b a 1;printf(a%d\n, a);printf(b%d\n, b);//算数右移return 0;
}
警告⚠ 对于移位运算符不要移动负数位这个是标准未定义的。
例如 int num 10; num-1;//error 4. 位操作符
位操作符有 //按位与 | //按位或 ^ //按位异或 注他们的操作数必须是整数 int main()
{int a 3;//00000000000000000000000000000011int b -5;//10000000000000000000000000000101//11111111111111111111111111111010//11111111111111111111111111111011 --补码int c a b;//00000000000000000000000000000011//11111111111111111111111111111011//00000000000000000000000000000011--- 3,打印3//按位与规则有0则为0全为1则为1printf(c%d\n, c);//c3return 0;
} | 按位或
按位或规则有1则为1全为0则为0int main()
{int a 3;//00000000000000000000000000000011int b -5;//10000000000000000000000000000101//11111111111111111111111111111010//11111111111111111111111111111011 --补码int c a | b;//00000000000000000000000000000011//11111111111111111111111111111011//11111111111111111111111111111011---- -5//按位或规则有1则为1全为0则为0printf(c%d\n, c);//c-5return 0;
} ^ 按位异或 1.可读性差2.效率不如使用临时变量的方法 3.异或只能交换整数局限按位或规则相同为0相异为1
a^a0
0^aa
异或支持交换律int main()
{int a 3;//00000000000000000000000000000011int b -5;//10000000000000000000000000000101//11111111111111111111111111111010//11111111111111111111111111111011 --补码int c a ^ b;//00000000000000000000000000000011//11111111111111111111111111111011//11111111111111111111111111111000---c的补码// 1000000000000000000000000000111// 1000000000000000000000000001000---原码 c-8//按位或规则相同为0相异为1printf(c%d\n, c);//c-8return 0;
}
5. 赋值操作符
赋值操作符是一个很棒的操作符他可以让你得到一个你之前不满意的值。也就是你可以给自己重新赋值。 int weight 120;//体重 weight 89;//不满意就赋值 double salary 10000.0; salary 20000.0;//使用赋值操作符赋值 赋值操作符可以连续使用比如 int a 10; int x 0; int y 20; a x y1;//连续赋值 这样的代码感觉怎么样 那同样的语义你看看 x y1; a x; 这样的写法是不是更加清晰爽朗而且易于调试 复合赋值符 - * / %
这些运算符都可以写成复合的效果。 比如: int x 10; x x10; x 10;//复合赋值 //其他运算符一样的道理。这样写更加简洁 6. 单目操作符
6.1 单目操作符介绍 ! 逻辑反操作 - 负值 正值 取地址 sizeof 操作数的类型长度以字节为单位 ~ 对一个数的二进制按位取反 -- 前置、后置-- 前置、后置 * * 间接访问操作符(解引用操作符) (类型) 强制类型转换 演示代码
#include stdio.h
int main()
{int a -10;int *p NULL;printf(%d\n, !2);printf(%d\n, !0);a -a;p a;printf(%d\n, sizeof(a));printf(%d\n, sizeof(int));printf(%d\n, sizeof a);//这样写行不行printf(%d\n, sizeof int);//这样写行不行return 0;
} 6.2 sizeof 和 数组
关于sizeof其实我们之前已经见过了可以求变量类型所占空间的大小。
#include stdio.h
void test1(int arr[])
{printf(%d\n, sizeof(arr));//(2)
}
void test2(char ch[])
{printf(%d\n, sizeof(ch));//(4)
}
int main()
{int arr[10] {0};char ch[10] {0};printf(%d\n, sizeof(arr));//(1)printf(%d\n, sizeof(ch));//(3)test1(arr);test2(ch);return 0;
}7. 关系操作符 ! 用于测试“不相等” 用于测试“相等” 这些关系运算符比较简单没什么可讲的但是我们要注意一些运算符使用时候的陷阱。
警告 在编程的过程中 和不小心写错导致的错误。