C语言基础之——操作符(上)

这篇具有很好参考价值的文章主要介绍了C语言基础之——操作符(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇文章,我们将展开讲解C语言中的各种常用操作符,帮助大家更容易的解决一些运算类问题。

这里提醒一下小伙伴们,本章知识会大量涉及到二进制序列,不清楚二进制序列的小伙伴,可以去阅读我的另一篇文章《数据在内存中的存储》学习了解。


目录

一.操作符分类

二.操作符讲解

1.算数操作符

2.移位操作符

(1)左移操作符 

(2)右移操作符

3.位操作符

(1)& 按位与

 (2)| 按位或

 (3)^ 按位异或

4.赋值操作符

5.单目操作符

总结


一.操作符分类

  • 算术操作符
  • 移位操作符
  • 位操作符
  • 赋值操作符
  • 单目操作符
  • 关系操作符
  • 逻辑操作符
  • 条件操作符
  • 逗号表达式
  • 下标引用,函数调用和结构成员

二.操作符讲解

由于操作符数量过多,所以本期文章我们将仅仅讲解前五种。

1.算数操作符

算数操作符包括 “+,-,*,/,%” 五个。较为简单,小伙伴们只需要注意以下几点:

  1. 除了“%”操作符之外,其他的几个操作符可以作用于整数和浮点数。
  2. 对于“/”操作符如果两个操作数都为整数,执行整数除法。只要有浮点数就执行浮点数除法
  3. “%”操作符的两个操作数必须为整数,返回的是整除后的余数

2.移位操作符

<<        左移操作符

>>        右移操作符

移位操作符的左边是要操作的数右边则是要移动的位数

要注意的是,移位操作符的操作数只能是整数,移动的对象则是整数的二进制序列

一个整型占四个字节,也就是32个bit位,要记住,整型在数据中存储的是二进制序列的补码,所以我们对整型的操作都是对其补码进行操作的。

(1)左移操作符 

左移操作符,顾名思义就是将整数的二进制序列向左边移动呗,那么它的规则是什么呢???

移位规则:

左边丢弃,右边补0

#include<stdio.h>
int main()
{
	int n = 6;
	//00000000 00000000 00000000 00000110-移动前
	//00000000 00000000 00000000 00001100-移动后
	int m = n << 1;
	printf("%d\n", n);
	printf("%d\n", m);
	return 0;
}

如上代码,将“6”的二进制序列向左移动一位,便得到了一个新的二进制序列。结果如下:

C语言基础之——操作符(上),c++,开发语言

 由结果可以看出,移位操作符并不会改变操作数本身,而且细心的小伙伴们可以看出,向左移动一位不就相当于每一位的数字都“乘2”嘛,也就是将数字翻倍,移动n位,便翻2的n次方倍

负数的操作与之一样,就是小伙伴们千万不要忘记原码和补码之间的转换

(2)右移操作符

移位规则:

右移运算分为两种:

1.逻辑移位

左边用0填充,右边丢弃

2.算术移位

左边用原值的符号位填充,右边丢弃

不同的编译器会有不同的右移运算,但是我们平时所使用的绝大多数编译器都是算数右移

#include<stdio.h>
int main()
{
	int n = -15;
	//10000000 00000000 00000000 00001111-原码
	//11111111 11111111 11111111 11110000-反码
	//11111111 11111111 11111111 11110001-补码
	//11111111 11111111 11111111 11111000-移动后补码
	//11111111 11111111 11111111 11110111-移动后反码
	//10000000 00000000 00000000 00001000-移动后原码
	int m = n >> 1;
	printf("%d\n", n);
	printf("%d\n", m);
	return 0;
}

结果如下: 

C语言基础之——操作符(上),c++,开发语言

 同左移类似,右移则是将数字折半,但是如果是奇数的话,结果则会是比小数小的最临近于小数的负数。比如-15的右移结果就是-8。

3.位操作符

&       按位与

|         按位或

^        按位异或

位操作符的操作数也必须是整数,也是对其二进制序列动手。

(1)& 按位与

假如我是一个企业高管,我现在需要程序员A程序员B一起来完成某个项目,这说明,A和B是必不可少的,他们两个少了谁这个项目都完不成。这便是按位与

口诀:同真则真,有假则假

#include<stdio.h>
int main()
{
	int a = 6;
	//00000000 00000000 00000000 00000110-补码
	int n = -15;
	//11111111 11111111 11111111 11110001-补码
	int m = a & n;
	//00000000 00000000 00000000 00000110-补码
	//11111111 11111111 11111111 11110001-补码
	//00000000 00000000 00000000 00000000-m的补码(重点)
	printf("%d\n", m);
	return 0;
}

我们习惯上将二进制序列的“1”视为真“0”视为假,a&n,便是两个二进制序列对应的每一位相与,从而得到一个新的二进制序列。

由上可知,m的二进制序列全为0,也就代表m的值为0,结果如下:

C语言基础之——操作符(上),c++,开发语言

 (2)| 按位或

假如我又是一个企业高管,我现在需要程序员A程序员B来完成某个项目,这说明,A和B他们两个只要有一个能来做这个项目,就能成,如果一个都没有,就做不了。这便是按位或

口诀:同假则假,有真则真

#include<stdio.h>
int main()
{
	int a = 6;
	//00000000 00000000 00000000 00000110-补码
	int n = -15;
	//11111111 11111111 11111111 11110001-补码
	int m = a | n;
	//00000000 00000000 00000000 00000110-补码
	//11111111 11111111 11111111 11110001-补码

	//11111111 11111111 11111111 11110111-m的补码(要点)

	//11111111 11111111 11111111 11110110-m的反码
	//10000000 00000000 00000000 00001001-m的原码
	printf("%d\n", m);
	return 0;
}

对两个二进制序列的每一位相或,便得到m的补码,但是m的符号位为1,是负数,所以要转化为原码来读。

结果如下:

C语言基础之——操作符(上),c++,开发语言

 (3)^ 按位异或

假如我还是一个企业高管……这个不好举例子了哈哈哈直接来看口诀:

相同为0,不同为1

#include<stdio.h>
int main()
{
	int a = 6;
	//00000000 00000000 00000000 00000110-补码
	int n = -15;
	//11111111 11111111 11111111 11110001-补码
	int m = a ^ n;
	//00000000 00000000 00000000 00000110-补码
	//11111111 11111111 11111111 11110001-补码
	//11111111 11111111 11111111 11110111-m的补码(重点)
	//11111111 11111111 11111111 11110110-m的反码
	//10000000 00000000 00000000 00001001-m的原码
	printf("%d\n", m);
	return 0;
}

将两个二进制序列的每一位相异或,结果如下:

C语言基础之——操作符(上),c++,开发语言

4.赋值操作符

所谓赋值操作符,也就是我们经常使用的“ = ”将一个常量或者常量表达式赋给一个变量

int a = 1;//不是赋值,是创建之后的初始化

a = 5;//是赋值

int b = 2;

int c = 0;

c = a + b;//也是赋值

除了等号以外,还有一些常用的复合赋值操作符:

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

这些符合赋值其实是两个运算式的合并,例如:

int a = 2;

a = a + 5 和 a += 5 是一样的效果,后者看起来会更加的简洁

5.单目操作符

所谓单目,也就是这种操作符的操作数只有一个

  • !                逻辑反操作
  • -                   负值
  • +                  正值
  • &                  取地址
  • sizeof           操作数的类型长度(以字节为单位)
  • ~                  对一个数的二进制按位取反
  • --                  前置后置--
  • ++                前置后置++
  • *                   间接访问操作符(解引用操作符)
  • (类型)           强制类型转换

 这些操作符我们大多数都知道,下面我们仅仅讲解一下不是那么熟悉的:

sizeof        操作数的类型长度

sizeof 计算的结果是 size_t 类型

size_t 是无符号整型

对 size_t 类型的数据进行打印,可以使用%zd或%u

int a = 10;

printf("%zd",sizeof(a));

结果为4。 

~                  对一个数的二进制按位取反

int a = 0;

printf("%d",~a);

0的补码二进制序列为:

00000000 00000000 00000000 00000000

111111111 111111111 111111111 111111111//为负数,取原码

111111111 111111111 111111111 111111110//反码

10000000 00000000 00000000 00000001//原码

结果为-1。

*        间接访问操作符

int a = 10;

int* p = &a;

*p;//这时候我们的*就是对p进行解引用操作,*p是通过p中存放的地址,找到p指向的对象。

*p 其实就是a。

(类型)           强制类型转换

int a = (int )3.14;

3.14在编译器中会被默认为是double类型,如果直接将其初始化给int型的a,则会在后续操作中出现误差甚至错误,所以要将其强制类型转化为int型。

总结

本期关于操作符的知识讲解到这里就要结束啦,稍后博主将更新C语言基础之——操作符(下)来讲解剩余的操作符。

喜欢博主文章的小伙伴们不要忘记一键三连哦,我们下期再见!文章来源地址https://www.toymoban.com/news/detail-668589.html

到了这里,关于C语言基础之——操作符(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】操作符

    算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用、函数调用和结构成员操作符 除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 对于 / 操作符如果两个操作数都为整数,执行整数除法。而只

    2024年01月16日
    浏览(53)
  • c语言---操作符(详解)

    算术操作符: + 、- 、*、/ 、% 移位操作符: 位操作符: | ^ ` 赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、= 、= 、= 、|= 、^= 单⽬操作符: !、++、–、、 、+、-、~ 、sizeof、(类型) 关系操作符: 、= 、 、= 、 == 、 != 逻辑操作符: 、|| 条件操作符: ? : 逗号表达式: , 下标引⽤: [

    2024年02月22日
    浏览(46)
  • C语言:“~”操作符详解

    ~:含义及用法举例 文章目录 前言 一、“~”是什么? 二、原码、反码及补码 1.简介 2.用法举例 ①正整数 ②负整数 ③零 三、“~”操作符 1.简介 2.用法举例 ①正整数 ②负整数 ③零 本文在简单介绍原码反码补码的基础上,介绍“~”操作符的用法。 ~:一种单目操作符,即对

    2024年02月10日
    浏览(53)
  • C语言---操作符详解

    算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号操作符 下标引用、函数调用和结构成员。 移位操作符,移动的是二进制位。 警告:对于移位运算符,不要移动负位数,这个是标准定义的。 3.1.1、原码、反码、补码介绍 整数

    2024年02月07日
    浏览(41)
  • 【C语言】操作符详解

    👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论💬 点赞👍🏻 收藏 📂 加关注😍 算术操作符 位移操作符 位操作符 赋值操作符 单目操作符 关

    2024年02月16日
    浏览(44)
  • C语言——操作符详解

    哈喽,大家好,今天我们来学习C语言中的各中操作符。 目录 1.操作符的分类 2.算数操作符 整数的二进制表示 3.位移操作符 3.1左移操作符 3.2右移操作符 4.位操作符 5.赋值操作符 6.单目操作符 6.1 单目操作符介绍 ~ 的用法: 6.2 sizeof 和 数组 7.关系操作符 8.逻辑操作符 9. 条件操

    2024年02月05日
    浏览(51)
  • C语言初级<操作符>

    C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。 本篇文章是基于C语言,对入门小知识操作符的讲解,展

    2024年02月12日
    浏览(40)
  • 【C语言】操作符----详解

    💓博客主页:江池俊的博客 ⏩收录专栏:C语言初阶之路 👉其他专栏:数据结构探索 💻代码仓库:江池俊的代码仓库 🍁 如果觉得博主的文章还不错的话,请点赞👍收藏🌟 三连支持一下博主💞 目录 操作符分类:  💨 算术操作符  💨 移位操作符  原码、反码、补码

    2024年02月14日
    浏览(40)
  • C语言操作符例题

    感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 🐒🐒🐒 个人主页 🥸🥸🥸 C语言 🐿️🐿️🐿️ C语言例题 🐣🐓🏀 python 下面代码的结果是:( ) A.a = 8 b = 23 c = 8 B.a = 9 b = 23 c = 8 C.a = 9 b = 25 c = 8 D.a = 9 b = 24 c = 8 答案 B c=++a是先执行++a,也就是a=a+1=6(注意这

    2024年02月04日
    浏览(51)
  • c语言操作符(下)

    目录 ​编辑 逗号表达式 下标访问[] 函数调⽤()  sizeof 结构成员访问操作符 结构体 结构体声明 直接访问  .成员名 间接访问   结构体指针-成员名 exp1, exp2, exp3, …expN 运算规则 :从左向右依次执⾏。整个表达式的结果是 最后⼀个表达式 的结果。 如图c的值为逗号表达式中

    2024年02月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包