初阶C语言——详解操作符(1)(下)

简介: 初阶C语言——详解操作符(1)(下)

这样我们就位操作符讲明白了,在给大家补充一点,这些操作符都是双目操作符,什么是双目操作符呢,比如3&5,&两边的操作数分别是3和5,那么&就是双目操作符,大家看到&是不是会想到取地址符号,当然他们肯定是不同的,取地址&是个单目操作符

下面是一个笔试题,不能创建临时变量(第三个临时变量)来交换数

#include<stdio.h>
int main()
{
  int a = 20;
  int b = 10;
  a = a ^ b;
  b = a ^ b;
  a = a ^ b;
  printf("%d %d", a, b);
  return 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 = y+1;//连续赋值
这样的代码感觉怎么样?
那同样的语义,你看看:
x = y+1;
a = x;
这样的写法是不是更加清晰爽朗而且易于调试。

所以我们在给我们的变量赋值的时候一定要看起来至少能让人明白a = x = y+1像这个代码的话先把y+1赋值给x在赋值给y,这样的可读性并没有分开赋值看起来的明白

复合赋值符

6. 单目操作符

逻辑反操作

相当于把真变成假,把假变成真比如我的if函数中if(1)就是真,但是我们如果加上!就变成if(!1)就是逻辑假

负值和正值

插入一个代码大家马上就能理解

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

编译器显示的答案就是4

正值就和我们的正数一样

  • . 取地址&

就是取出该变量在我们内存的位置

  • 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;
}

在X86编译器下地址的字节是4位,在64位的平台下,字节大小是8位

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;
}
//问:
//(1)、(2)两个地方分别输出多少?
//(3)、(4)两个地方分别输出多少?

只要大家知道函数在传数组的时候传过去的首元素的地址,相信大家应该就能理解了,之前的文章也专门讲过,不会的往前看看就行了。

  • ~
    是按位取反,相当于把一个二进制数1的部分变成0,0的部分变成1
#include<stdio.h>
int main()
{
  int a = 2;
  printf("%d", ~a);
  return 0;
}

- 前置++和–

先++或者–然后再使用

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

后置++和–

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

解引用操作符*

一般用在指针,比如想知道指针变量的内容的时候我们就可以用*来知道他的内容,大家是不是可以发现他和&取地址刚刚好相反

()这个符号是强制转换,举个简单的例子

#include<stdio.h>
int main()
{
  float a = 5.0;
  int c = (int)a / 2;
  printf("%d", c);
  return 0;
}

虽然是浮点型,但是经过我们的强制转换,最后a是一个整型

  • 7. 关系操作符

警告:一定要区分==和=

今天的分享就到这里,期待下次和你们见面


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