C语言:操作符总结

一、算数运算符

       +加     -减     *乘     /除      %取模

1.除法运算:若两个操作数都为整数则进行整数除法,若两个操作数有一个为浮点数则进行浮点数除法。

2.取模操作符的两个操作数都必须为整数。

二、移位操作符

       <<左移     >>右移

1.<<左移:移动二进制序列,向左移动,左边遗弃,右边补0

2.>>右移:①算数右移:移动二进制序列,向右移动,右边遗弃,左边用原该值的符号位补充

             ②逻辑右移:移动二进制序列,向右移动,右边遗弃,左边补0

      注:①计算机里存放的是数字的补码

                正数的原码,反码,补码都一样。

                00000000000000000000000000000001--数字1

                负数则不同:例如-1

                10000000000000000000000000000001--原码

                11111111111111111111111111111110--反码(原码按位取反就是反码)

                11111111111111111111111111111111--补码(反码加1就是补码)

             ②对于移位操作符,不要移动负数位

三、位操作符

       &按位与     | 按位或      ^按位异或

1.&按位与:按二进制位与,对应的二进制位有一个为0就是0

2.| 按位或:按二进制位或,对应的二进制位有一个为1就是1

3.^按位异或:按二进制位异或,对应的二进制位相同为0,相异为1

四、赋值操作符

       =等于:可连续使用

五、符合赋值符

       +=    -=    *=    /=    <<=    >>=    %=    &=    |=    ^=

       a=a+3  ==>  a+=3(这样写更加便捷)

六、单目运算符

       !逻辑反操作      -负值      +正值      &取地址      sizeof操作数的类型长度

       ~按位取反      --自减      ++自加      *解引用操作符       (类型)强制类型转换

1.sizeof①表达式里面的表达式不进行计算

            ②int arr[10]--->sizeof(arr)=sizeof(int [10])=10(数组也有类型)

2.++a:先增加,再运算    a++:先运算,再增加(--相同)

3.强制类型转换:int a=(int)3.14;

七、关系运算符

       >大于     <小于     >=大于等于     <=小于等于     !=判断不等于     ==判断等于

     //需要注意在判断等于时是两个等号。

八、逻辑操作符

1.&&逻辑与

    有一个为假,结果为假(如:1&&2-->1     0&&2-->0)

2.|| 逻辑或

    有一个为真,结果为真(如:1||2-->1     0||2-->1)

九、条件操作符

       exp1 ? exp2 : exp3

当exp1为真,结果为exp2;当exp1为假,结果为exp3

十、逗号表达式

       exp1,exp2,exp3,......,expN

逗号表达式就是用逗号隔开多个表达式,从左向右依次执行,但整个表达式的结果是最后一个表达式的结果。

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

1.下标引用 []

       操作数:一个数组名+一个索引值(如:int arr[10])

2.函数调用操作符()

       括号()里的操作数为传递给函数的参数

3.结构成员--->   .  结构体     ->结构体指针( (*p).name  相当于  p->name  )

  • 定义一个学生类型struct Stu(没有占据内存空间)。
  • Stu为结构体标签。
  • struct Stu s(这里的s为结构体变量)。
  • 通过struct Stu这个类型创建s变量的这个过程叫做实例化。
  • 若想要给结构体里的成员赋值我们可以采用以下方法:

           strcpy(s.name,“李四”);strcpy(s.sex,“男”);

           s.age=20;(整型变量可以直接放进去)

  • 结构体成员的访问-->s.name   s.age   s.sex
### C语言中 `::` 操作符的含义和用法 在C语言的标准定义中,并不存在 `::` 操作符。然而,在更广泛的C语言生态环境中,特别是在与C++或特定编译器扩展相关的场景下,`::` 操作符可能会被提及。以下是关于 `::` 的详细说明: 1. **C++中的作用域解析操作符** 在C++中,`::` 是作用域解析操作符,用于访问命名空间、类或结构体中的成员[^5]。它允许程序员明确指定某个标识符属于哪个命名空间或类。例如: ```cpp namespace MyNamespace { int value = 42; } int main() { int value = 10; printf("Local value: %d\n", value); // 输出本地变量 printf("Global value: %d\n", MyNamespace::value); // 使用 :: 访问命名空间中的变量 return 0; } ``` 上述代码展示了如何通过 `::` 访问命名空间 `MyNamespace` 中的变量 `value`。 2. **C语言中的缺失** 标准C语言并不支持命名空间的概念,因此也不存在 `::` 操作符。如果在C代码中看到 `::`,可能是由于以下原因之一: - 使用了C++编译器编译C代码。 - 使用了某些特定编译器(如微软的MSVC)提供的扩展功能[^6]。 3. **特定编译器扩展** 在某些编译器(如微软的MSVC)中,`::` 可能被用作对全局作用域的引用。例如,在全局作用域中定义了一个函数或变量时,可以通过 `::` 明确指出其为全局变量。这种用法在标准C语言中并不存在,但在扩展实现中可能有效。例如: ```c int value = 10; void func() { int value = 20; printf("Local value: %d\n", value); // 输出局部变量 printf("Global value: %d\n", ::value); // 使用 :: 引用全局变量(仅在支持此扩展的编译器中有效) } ``` 4. **总结** 在标准C语言中,`::` 并不是一个合法的操作符。如果需要使用类似的功能,可以考虑通过其他方式实现,例如通过前缀命名规则来模拟命名空间的效果。而在C++或特定编译器扩展中,`::` 通常作为作用域解析操作符使用[^7]。 ```cpp // 示例:C++中使用 :: 访问类成员 class MyClass { public: static int value; }; int MyClass::value = 42; // 使用 :: 定义类的静态成员 int main() { printf("Class value: %d\n", MyClass::value); // 使用 :: 访问类的静态成员 return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值