首页 > 编程语言 >编程之路,从0开始:操作符详解

编程之路,从0开始:操作符详解

时间:2024-11-08 21:46:25浏览次数:3  
标签:int 编程 补码 详解 按位 printf 操作符 原码

Hello大家好!我们又见面啦!

给生活添点passion,开启今天的编程之路!

目录

1、算术操作符

2、移位操作符

3、位操作符

(1)按位与

(2)按位或

(3)按位异或

(4)按位取反

4、单目操作符

(1)!操作符

(2)szieof

(3)(类型)

5、逗号表达式

7、关系操作符

8、逻辑操作符

9、? :操作符

10、下标访问[],函数调用()

11、结构体访问操作符

(1)结构的声明

(2)结构体的定义

(3)结构体的使用

12、操作符优先级,结合性


1、算术操作符

        算术操作符:+,-,*,/,%

        以上操作符分别为加法,减法,乘法,整除,取余(一个数除以另一个数的余数)

相信大家在练习中已经用过很多次了,这里就不过多赘述了。

2、移位操作符

        移位操作符:<<,>>

        移位操作符已经下面要讲的位操作符都是针对二进制数来讲的。

        在生活中,我们都使用十进制来表示数,也就是满十进一。类比一下,二进制就是满二进一。

        这里我们主要目的是介绍操作符,对于二进制数就不过多介绍了

        下面来看这串代码:

#include<stdio.h>

int main()
{
	int n = 5;
	int m=n << 1;
	printf("%d", m);
	return 0;
}

        输出结果为10,为什么呢?

        这里我们选择三十二位编码,那么5的二进制应该是00000000000000000000000000000101(第一位我们叫符号位,0为正数,1为负数)。<<向左移动一位,那么我们就丢弃最左边的一位,并且用0补上右边空缺的一位。现在我们的m应该是00000000000000000000000000001010。

        现在我们把左移换成右移动,发现输出结果为2。

        右移的规则是将二进制位右边的丢弃,左边用原数的符号位补充。(算术右移)

        注意:(1)移位操作符不改变数的本身,这也就是上面代码为什么要定义变量m。

(2)移位操作符操作数只能是整数。

3、位操作符

        位操作符:&,|,^,~

        上面四个操作符分别为按位与,按位或,按位异或,按位取反。

        我们通过这串代码的输出结果,来介绍位操作符。

#include<stdio.h>

int main()
{
	int n = 5;
	int m = -3;
	printf("%d\n", n & m);//5
	printf("%d\n", n | m);//-3
	printf("%d\n", n ^ m);//-8
	printf("%d\n", ~0);//-1
	return 0;
}

(1)按位与

        首先我们介绍原码,反码和补码。

        内存中将数存储为补码的形式,所以我们的计算都要换成补码形式来理解。

        首先,正整数的原码,反码,补码都是一样的。所以我们来看负整数的原码反码和补码,拿-3举例:

原码:-3:10000000000000000000000000000011(符号位是1表示负数)

反码:符号位不变,剩下所有位取反(0变1,1变0)

-3:11111111111111111111111111111100

补码:在反码的基础上加1

-3:11111111111111111111111111111101

        好的,那么我们现在也写出5的补码:00000000000000000000000000000101

        现在正是介绍按位与:我们知道-3和5都是32位,每对应的一位如果都是1,返回1;只要有一位不为1,返回0。那么我们输出数字的补码应该为00000000000000000000000000000101。那么输出结果就是-1。(因为计数位为正,补码原码相同,直接输出补码的结果。)

        补充:我们把补码换成原码:先取反,再加一(也就是说,原码到补码和补码到原码的操作是一样的)

(2)按位或

        同样的顺序变成补码,这里不再赘述。

        按位或:每对应的一位如果都是0,返回0;只要有一位不为0,返回1。

        现在我们很容易得到输出数的补码为:11111111111111111111111111111101

        现在我们把补码换成原码:取反:10000000000000000000000000000010

        再加一:10000000000000000000000000000011

        输出结果为3。

(3)按位异或

        按位异或:两个对应位置相反返回1,相同返回0。

        输出结果为:11111111111111111111111111111000

        换成原码:10000000000000000000000000001000

        输出结果为-8。

(4)按位取反

        顾名思义,每一位都取反:输出结果为-1

4、单目操作符

        单目操作符:!,++,--,&(注意这里不是按位与),*,+,-,~,sizeof,(类型)

        以上操作符中,我们只介绍几个不常见的以及没提到过的(&和*以后会讲)

(1)!操作符

        表示把当前值的真假取反。

        也就是说,操作数为真变成假的,假的变成真的。

(2)szieof

        用于获取操作数在内存中占用的字节数。

#include<stdio.h>

int main()
{
	int n = 5;
	int m = sizeof(n);
	printf("%d", m);
	return 0;
}

        int型占用四个字节,输出结果为4。

(3)(类型)

        (类型)表示强制类型转换

#include<stdio.h>

int main()
{
	int n = 5;
	int m = sizeof(n);
	printf("%lf", (double)m);
	return 0;
}

        这里我们将m强制转换成了double型

5、逗号表达式

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

#include<stdio.h>

int main()
{
    int n = 5;
    int m = 6;
    int c = (n++, m++, m + n);
    printf("%d",c);//结果为13
    return 0;
}

7、关系操作符

        关系操作符:>,>=,<,<=,==,!=

        大于,大于等于,小于,小于等于,等于,不等于相信这些大家都能熟练使用,这里不再介绍。

8、逻辑操作符

        逻辑操作符:&&、||

        逻辑与(并):我们可以理解成和,并且的意思。&&两边表达式须同时成立。

        逻辑或:我们理解成或的意思,及||两边表达式只成立一个就可以。

9、? :操作符

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 6;
	int c = (a > b) ? 1 : 0;//如果a>b返回1,否则返回2
	printf("%d", c);
	//结果为0
	return 0;
}

10、下标访问[],函数调用()

        下标访问和函数调用在数组和函数章节分别使用过,相信大家不陌生了,这里不再过多赘述。

11、结构体访问操作符

        现在我们先讲讲什么是结构体。比方说我们现在有一份档案,里面放着各个年级各个学生的个人资料。每个学生的个人信息包含年龄,姓名,性别......那么这份档案就是一个结构体。它包含的元素(每个学生)可以记录对象的多个信息。

(1)结构的声明

struct book 
{
int age;//一个学生的年龄;
char name[100];//一个学生的名字 ;
};//注意分号不能少;

        这里我们像是先把学生的档案打印出来,上面有姓名,年龄两个栏,但是还没填东西。

        声明通常放到最上面。

(2)结构体的定义

#include<stdio.h>
struct stu
{
	int age;//一个学生的年龄;
	char name[100];//一个学生的名字 ;
};//注意分号不能少;
int main()
{
	struct stu a = { 20,"lihua"}; //定义
	struct stu b = { 19,"wangming" };
	struct stu c = { 18,"zhanglei" };
	return 0;
}

        现在我们把栏目填上内容。

(3)结构体的使用

#include<stdio.h>
struct stu
{
	int age;//一个学生的年龄;
	char name[100];//一个学生的名字 ;
};//注意分号不能少;
int main()
{
	struct stu a = { 20,"lihua"}; //定义
	struct stu b = { 19,"wangming" };
	struct stu c = { 18,"zhanglei" };
	printf("%s:%d\n", a.name, a.age);
	printf("%s:%d\n", b.name, b.age);
	printf("%s:%d\n", c.name, c.age);//使用结构体
	return 0;
}

        实际上,结构体这一部分的内容很多,这里只是简单引入,简单使用,等后续会进一步介绍。

12、操作符优先级,结合性

注:本素材来源于网络

        在编程时,如果不注意操作符优先级,有时会达不到想要的效果。

        好了,今天的内容就分享到这,期待我们的下次见面!

标签:int,编程,补码,详解,按位,printf,操作符,原码
From: https://blog.csdn.net/2401_87995839/article/details/143617900

相关文章

  • 实验3 类和对象_基础编程2
    试验任务1: button.hpp:  #pragmaonce#include<iostream>#include<string>usingstd::string;usingstd::cout;//按钮类classButton{public:Button(conststring&text);stringget_label()const;voidclick();private:......
  • 详解:字符串常量池
            字符串常量池是Java运行时环境(JRE)的一部分,它用于存储字符串字面量。字符串字面量是源代码中直接用双引号括起来的字符串,例如"hello"。在Java中,字符串是不可变的,这意味着一旦创建了一个字符串对象,它的值就不能改变。        当Java编译器遇到字符串字......
  • Oracle OCP认证考试考点详解082系列15
    题记:本系列主要讲解OracleOCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。71.第71题:题目解析及答案:对于数据库,使用数据库配置助手(DBCA)可以执行以下哪两项任务?A.为新数据库配置非标准块大小。数据库配置助手(DBCA)可用于为新创建的数据库配置非标准块大小。在......
  • 深度学习:循环神经网络(RNN)详解
    循环神经网络(RNN)详解**循环神经网络(RecurrentNeuralNetwork,RNN)**是一类能够处理序列数据的神经网络,其设计使得网络可以在每个时间步上保留先前时间步的信息。RNN通过在时间步之间共享参数,能够建模输入序列中元素的时序依赖关系。由于其递归结构,RNN在自然语言处理、语音......
  • 实验3 类和对象_基础编程2
    实验任务11#pragmaonce23#include<iostream>4#include<string>56usingstd::string;7usingstd::cout;89//按钮类10classButton{11public:12Button(conststring&text);13stringget_label()const;14voi......
  • 天天学编程Day10
    今日两道编程题LCR140. 训练计划IIclassSolution{public:ListNode*trainingPlan(ListNode*head,intcnt){//我选择使用双指针方法定义两个位置在头结点的指针//先让快指针先走cnt个位置然后让两个指针同时走//当快指针走到空节......
  • Cursor:编程软件中的璀璨明珠,解锁高效开发新姿势
    在编程领域,有一款备受瞩目的软件——Cursor。它为开发者们带来了全新的编程体验,无论是新手还是经验丰富的程序员都值得关注。本文将探讨Cursor的功能、特点以及它如何助力开发者提升编程效率。(无广)一、强大的功能特性(一)智能代码补全Cursor的代码补全功能堪称一绝。它不像......
  • Dubbo详解及其应用
    DubboDubbo是一个阿里巴巴开源的高性能JavaRPC框架,专为解决大规模微服务架构中的服务治理、服务发现、负载均衡和远程通信等问题而设计。它允许服务提供者将业务功能封装成服务,而服务消费者则可以像调用本地方法一样调用这些远程服务,从而实现服务的解耦和可扩展性。Dubbo......
  • 【MySQL】数据库备份详解
    一、引言1.1数据库备份的重要性二、MySQL数据库备份的基础知识2.1备份类型2.2备份工具与方法三、MySQL数据库备份的实施步骤3.1环境准备3.2选择合适的备份工具与方法3.3执行备份3.4验证备份3.5存储与管理备份四、MySQL数据库恢复流......
  • 实验三 类和对象_基础编程2
    实验任务1button.hpp 1#pragmaonce23#include<iostream>4#include<string>56usingstd::string;7usingstd::cout;89//按钮类10classButton{11public:12Button(conststring&text);13stringget_label()con......