C语言第十一课--------操作符的使用与分类-------基本操作

简介: C语言第十一课--------操作符的使用与分类-------基本操作

算术操作符

+    -   *   /   %

*   - +等操作符就跟数学的用法一样,这里先不讲,

/ 有两种用法,一种为整数除法,一种为小数除法

#include <stdio.h>
int main()
{
  int a = 20;
  printf("%d\n", a / 5);
  printf("%lf\n", a / 5.0);
  return 0;
}

%只能是两边只能是整数

移位操作符(针对的是该数的补码)

<< 左移操作符

>> 右移操作符

注:移位操作符的操作数只能是整数。

这两类操作符主要是针对补码来进行的

下面我们来普及一下知识

整数在二进制中的表示中有三种形态分别是源码 、反码、补码

原码:按照数值的正负直接写出一个整数的二进制数,正数符号位为0,负数符号位为1

对于一个整数的在C语言中的大小是四个字节,即32bit  

对于有符号的整数来说,最高位的1位是符号位, 符号位为1 表示是负数, 符号位为10表示是正数

对于无符号整数(正数),所有位都是有效位, 0无符号位

反码:正数的反码和正数的原码相同,负数的反码符号位不变,其他位取反

补码::正数的补码和正数的原码相同,负数的补码是在反码的基础上加1

 

计算机采用的就是取反,加1的套路

C语言中,内存存一个整数是存它的补码,(整数在内存中存储的是补码),整数在计算的时候使用的也是补码

>>右移运算符

分类:1.逻辑右移

           2. 算术右移

这两种右移是由编译器决定的,不能由个人决定,vs编译器是算术右移

#include <stdio.h>
int main()
{
  int m = 7;
  int n = 7 >> 1;
  printf("%d", n);
  return 0;
}

算术右移:

根据你要移动的位数在最右边舍弃几位,并在最左端补上0,,而负数的,在最左端补上1

逻辑右移:

根据你要移动的位数在最右边舍弃几位,并在最左端补上0

<<左操作符

你要移动的位数在最左边舍弃几位,并在最右端补上0,

位操作符(针对的是该数的补码)

&//按位与

|//按位或

^//按位异或

注:他们的操作数必须是整数。

       这个操作符也是对操作数的补码进行操作的

#include <stdio.h>
int main()
{
  int a = -5;
  int b = 3;
  printf("%d\n", a & b);
  printf("%d\n", a | b);
  printf("%d\n", a ^ b);
  return 0;
}

&//按位与

跟数学的与相识,全为真才是真,两数对应的二进制位都为1才是1,其他都是0

-5 & 3==》00000000000000000000000000000011(补码)

|//按位或

跟数学的或相识,有真才是真,全假才为假,两数对应的二进制位只有有一个为1,才是1,全部为0才是0

-5 | 3==》1111111111111111111111111111010 (补码)==》10000000000000000000000000000101 (原码)

^//按位异或

两数对应的值是一样的就为0,不同就为1

-5^3==>1111111111111111111111111111000(补码) ==》10000000000000000000000000001000(原码)

a^a=a

0^a=a

我们计算两数交互的时候可以利用这个方法来,可以少创建一个变量,这个方法的可读性不高,建议不要使用太多

#include <stdio.h>
int main()
{
  int a = 5;
  int b = 6;
  printf("a=%d b=%d\n", a, b);
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  printf("a=%d b=%d\n", a, b);
  return 0;
}

需要注意的是,这些操作符适用于整形

赋值操作符

=

从右向左赋值

复合赋值符

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

这些的使用就跟  a = a+b===> a+=b是一样的效果

单目操作符

!是把真变成假,假变成真   变成假是0, 变成真是1

&取地址,

* 解引用操作符

#include <stdio.h>
int main()
{
  int a = 0;
  printf("%p\n", &a);
  int* p = &a;
  int arr[10];
  int* pa = arr;
  printf("%p\n", pa);
  printf("%p\n", &pa);
  *p = 15;//对p解引用操作,*p是通过p中存放的地址,找到p指向的对象,*p就是a
  printf("%d\n", a);
  return 0;
}

sizeof计算结果返回size_t类型也就是unsigned int  (无符号整型) 输出格式是%zd

#include <stdio.h>
int main()
{
  int arr[10];
  printf("%zd\n", sizeof arr);
  printf("%zd\n", sizeof (arr));
  printf("%zd\n", sizeof (int));
  printf("%zd\n", sizeof arr / sizeof(int));
  return 0;
}

sizeof 不是函数,因为函数的引用的()不能省略,

是计算类型或者变量的大小,单位是字节

计算变量大小可以不写(),如果计算类型要保留()

~           对一个数的二进制按位取反(包括符号位)

#include <stdio.h>
int main()
{
  int a = 0;
  printf("%d\n", ~a);
  return 0;
}

结果为-1 ,0的补码为00000000000000000000000000000000,~0则是11111111111111111111111111111111,取反加1得到原码为10000000000000000000000000000001

也就是-1了

#include <stdio.h>
int main()
{
  int a = 2;
  printf("%d", a | (1 << 2));
  printf("%d", (a | (1 << 2)) & (1 << 2));
  return 0;
}

++、--都有两种用法,分别是前置和后置

++

前置++:先加1 再使用

后置++;先使用再加1

#include <stdio.h>
int main()
{
  int a = 0;
  int b = ++a;
  printf("a=%d  b=%d\n", a, b);
  b = a++; 
  printf("a=%d  b=%d\n", a, b);
  return 0;
}
--

前置--:先减1 再使用

后置--;先使用再减1

#include <stdio.h>
int main()
{
  int a = 0;
  int b = --a;
  printf("a=%d  b=%d\n", a, b);
  b = a--; 
  printf("a=%d  b=%d\n", a, b);
  return 0;
}

(类型)       强制类型转换

#include <stdio.h>
int main()
{
  int a = (int)3.14;
  printf("%d", a);
  return 0;
}

类型转换尽量能不使用就不使用

关系操作符

> 、>= 、< 、<= 、!=  (  用于测试不相等” )、 ==    (   用于测试 “ 相等 ”)

在编程的过程中 == 和 = 不小心写错,导致的错误。

逻辑操作符

&&     逻辑与

||           逻辑或

#include <stdio.h>
int main()
{
  int a = 1;
  int b = 0;
  printf("%d", a && b);
  printf("%d", a || b);
  return 0;
}

短路操作

#include <stdio.h>
int main()
{
    int i = 0,a=0,b=2,c =3,d=4;
    i = a++ && ++b && d++;
    //i = a++||++b||d++;
    printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);
    return 0;
}

使用&&时只要一方为假另一方就不用算了

使用|| 只要一边为真,另一方就不用算了

总结:

操作符展示到这里了,后面还有一篇介绍下面的,有不懂的小可爱可以私聊我

相关文章
|
3月前
|
存储 C语言 索引
【C语言篇】操作符详解(下篇)
如果某个操作数的类型在上⾯这个列表中排名靠后,那么⾸先要转换为另外⼀个操作数的类型后执⾏运算。
74 0
|
3月前
|
程序员 编译器 C语言
【C语言篇】操作符详解(上篇)
这是合法表达式,不会报错,但是通常达不到想要的结果, 即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执⾏的是下⾯的表达式。
257 0
|
26天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
34 10
|
1月前
|
编译器 C语言
C语言常见编译错误分类及其解决方案
C语言常见编译错误分类及其解决方案
74 1
C语言常见编译错误分类及其解决方案
|
1月前
|
存储 人工智能 BI
C语言:数组的分类
C语言中的数组分为一维数组、多维数组和字符串数组。一维数组是最基本的形式,用于存储一系列相同类型的元素;多维数组则可以看作是一维数组的数组,常用于矩阵运算等场景;字符串数组则是以字符为元素的一维数组,专门用于处理文本数据。
|
1月前
|
存储 编译器 C语言
【C语言】简单介绍进制和操作符
【C语言】简单介绍进制和操作符
160 1
|
1月前
|
存储 编译器 C语言
初识C语言5——操作符详解
初识C语言5——操作符详解
171 0
|
3月前
|
C语言
C语言操作符(补充+面试)
C语言操作符(补充+面试)
45 6
|
3月前
|
存储 编译器 C语言
十一:《初学C语言》— 操作符详解(上)
【8月更文挑战第12天】本篇文章讲解了二进制与非二进制的转换;原码反码和补码;移位操作符及位操作符,并附上多个教学代码及代码练习示例
59 0
十一:《初学C语言》—  操作符详解(上)
|
4月前
|
C语言
五:《初学C语言》— 操作符
本篇文章主要讲解了关系操作符和逻辑操作符并附上了多个代码示例
44 1
五:《初学C语言》—  操作符