C语言运算符号

算术运算符

用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、自增(++)、自减(–)共七种。
例:5 + 3 = 8 ,10 - 3 = 7 ,3 * 8 = 24 ,15 / 5 = 3 ,15 % 4 = 3
自增:前自增(++i): 先执行自增操作,再进行其他操作
后自增(i++): 先进行其他操作,再执行自增操作

int i = 5;
printf("%d\n", ++i); // 输出6
printf("%d\n", i++); // 输出6,但i的值变为7

自减:同上

关系运算符

用于比较运算,返回true 或 false。包括大于(>)、小于(<)、等于(==)、 大于等于(>=)、小于等于(<=)和不等于(!=)六种。

int a = 5;
int b = 3;
printf("%d\n", a == b); // 0(false)
printf("%d\n", a != b); // 1(true)
printf("%d\n", a > b); // 1
printf("%d\n", a < b); // 0
printf("%d\n", a >= b); // 1
printf("%d\n", a <= b); // 0

逻辑运算符

用于逻辑运算。包括与(&&)、或(||)、非(!)三种。
&&:用于连接两个表达式,只有当两个表达式都为真时,整个表达式才为真。

if ( (5 > 3) && (2 < 4) ) 
   { 
      putchar(0x55;
    }

||:用于连接两个表达式,只要其中一个表达式为真,整个表达式就为真。

if ( (5 > 3) || (6 < 4) ) 
   {
      putchar(0x55;
    }

!:用于反转一个表达式的逻辑值。如果表达式为真,!运算符将其变为假,反之亦然。

if (!(i > 100))
   {
      putchar(0x55;
    }

位操作运算符

参与运算的量,按二进制位进行运算。包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)六种。
位与(&):两个数的二进制同时为1,结果才为1,否则为0
例:5 & 3
0101
0011
----------
0001 1
位或(|):两个数的二进制有一个为1,结果就为1
例:5 | 3
0101
0011
----------
0111 7
位非(~):对操作数的每一位执行逻辑非运算,将 0 变为 1,1 变为 0。
例:~5
0101
----------
1010 -6(二进制补码: 1010)
位异或(^):判断两个对应位是否不同,若不同则结果为 1,相同则为 0。
例:5 ^ 3
0101
0011
----------
0110 6
左移(<<):将操作数的所有二进制位向左移动指定的位数,右边空出的位用 0 填充。
例:5 << 2
0000 0101 << 0001 0100 20
右移(>>):将操作数的所有二进制位向右移动指定的位数,左边空出的位根据操作数的类型填充(正数补 0,负数补符号位)。
例:20 >> 2
0001 0100 >> 0000 0101 5

赋值运算符

用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=)和复合位运算赋值(&=,|=,^=,>>=,<<=)三类共十一种。
例:复合算术赋值

x = 10
x += 5  // x = x + 5,结果x为15
x -= 3  // x = x - 3,结果x为12
x *= 2  // x = x * 2,结果x为24
x /= 4  // x = x / 4,结果x为6.0
x %= 5  // x = x % 5,结果x为1.0

复合位运算赋值

 y = 10           二进制: 1010
 y &= 6   // y = y & 6 (0110),结果y为2 (0010)
 y |= 8   // y = y | 8 (1000),结果y为10 (1010)
 y ^= 5   // y = y ^ 5 (0101),结果y为15 (1111)
 y <<= 2  // y = y << 2,结果y为60 (111100)
 y >>= 3  // y = y >> 3,结果y为7 (00111)

条件运算符

是一个三目运算符,用于条件求值(?😃,是C语言中唯一需要三个操作数的运算符,用于在一行代码中实现条件判断并返回结果,常用于替代简单的if-else语句。
例:

(a > b) ? a : b  // 如果 a 大于 b,则表达式的值为 a,否则为 b

逗号运算符

用于把若干表达式组合成一个表达式(,),允许在一个表达式中按顺序执行多个操作,并返回最后一个操作的值。
例:

int a = 1, b = 2, c;
c = (a + 1, b + 2);   // c 的值为 4,因为 b + 2 是最后一个表达式

指针运算符

用于取内容(*)和取地址(&)二种运算。
例:取地址运算符:&

int num = 10;  
int* ptr = &num;   // ptr存储num的内存地址  
printf("num的地址:%p\n", (void*)ptr);  // 输出num的内存地址

解引用运算符:*

int num = 10;  
int* ptr = &num;  
*ptr = 20;   // 通过指针修改num的值,此时num变为20  
printf("num的值:%d\n", num);   // 输出20  

求字节数运算符

用于计算数据类型所占的字节数(sizeof)。
例:

int main()
{
    printf("char: %zu 字节\n", sizeof(char));    // 通常为1
    printf("int: %zu 字节\n", sizeof(int));        // 通常为4
    printf("float: %zu 字节\n", sizeof(float));     // 通常为4
    printf("double: %zu 字节\n", sizeof(double));   // 通常为8
    printf("long long: %zu 字节\n", sizeof(long long)); // 通常为8
    return 0;
}

特殊运算符

包括括号(),下标[],成员(->,.)等几种。
括号():控制优先级、函数调用、类型转换、分组
例:控制优先级

int a = 2 + 3 * 4;       // a = 14
int b = (2 + 3) * 4;    // b = 20

函数调用

int result = max(5, 10);  // 调用max函数

类型转换

double pi = 3.14159;   // 定义double类型变量pi,赋值为3.14159
int int_pi = (int)pi;   // 将pi强制转换为int整数类型,结果赋值给int_pi为3

分组

int c = ((a > b) ? a : b) + 1;

下标[]:数组元素访问、指针指向元素访问
例:数组元素访问

int arr[5] = {10, 20, 30, 40, 50};
printf("%d\n", arr[2]);    // 输出 30

指针指向元素访问

int *ptr = arr;  // ptr 指向 arr 的首元素
printf("%d\n", ptr[1]);   // 输出 20

成员(->,.):直接成员访问符(.) 和间接成员访问符(->)
直接成员访问符(.):点运算符用于访问实际对象的成员。如果你有一个结构体实例,你可以使用点运算符来访问其成员。
例:

struct Employee
{
   char first_name[16];  // 存储员工名字的字符数组(最多15个字符+终止符)
   int  age;  // 存储员工年龄的整数
 } emp;  // 声明一个Employee类型的变量emp
strcpy(p_emp->first_name, "zara");  // 把值 "zara" 赋给对象 emp 的 first_name 成员。

间接成员访问符(->):通过指针访问结构的成员

strcpy(p_emp->first_name, "zara");  // p_emp 是一个指针,指向类型为 Employee 的对象,把值"zara" 赋给对象 emp 的 first_name 成员
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值