p19 C语言操作符详解

news2024/11/13 9:28:35

算术操作符 

1.除了%操作符之外,其他的几个操作符可以作用于整数和浮点数。

2.对于/操作符如果两个操作数都为整数,执行整数除法。而只要有浮点数值型的就是浮点除法。

3.%操作符的两个操作数必须为 整数。返回的是整除之后的余数。

#include<stdio.h>
int main(){
	int a=5/2;//商2余1
	printf("a=%d\n",a);
	return 0;
}

    double a=5/2.0;//商2余1
    printf("a=%lf\n",a); 

 

移动操作符

<<左移操作符

>>右移操作符

右移操作符:

1.算数右移

右边丢弃,左边补原符号位

2.逻辑右移

右边丢弃,左边补0

int a=16;
	int b=a>>1;//右移操作符,右移是二进制位
	//10000
	//1.算数右移
	//2.逻辑右移
	printf("b=%d ",b);
	return 0;

int a=-1;
    //整数2进制表示有:原码、反码、补码
    //存储到内存中是补码
    //10000000000000000000000001//原码
    //11111111111111111111111110//反码
    //11111111111111111111111111//补码
    int b=a>>1;//右移操作符,右移是二进制位
    //10000
    //1.算数右移
    //2.逻辑右移
    printf("b=%d ",b);
    return 0;
}

 

int main(){
	int a=5;
	int b=a<<1;

	printf("%d\n",b);
	return 0;
	}

左移,左边补零,右边丢弃

位操作符

&    //按位与

|     //按位或

^     //按位异或

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

int main(){
    //&-按2进制位与
    int a=3;
    int b=5;
    int c=a&b;
    //00000000000000000000000000000011
    //00000000000000000000000000000101
    //00000000000000000000000000000001
    printf("%d\n",c);

    return 0;
}

//按位或
int main(){
	int a=3;
	int b=5;
	int c=a|b;
	printf("%d\n",c);
	//00000011
	//00000101
	//00000111
	return 0;
}

 

//按位异或
int main(){
    int a=3;
    int b=5;
    int c=a^b;
    printf("%d\n",c);
    //00000000000000011
    //00000000000000101
    //00000000000000110

    return 0;
}

交换

int main(){
    int a=3;
    int b=5;
    int tmp=0;
    printf("before:a=%d b=%d\n",a,b);
    tmp=a;
    a=b;
    b=tmp;
    printf("after:a=%d b=%d\n",a,b);
    return 0;

}

无中间变量交换

int main(){
    int a=3;
    int b=5;
    //int tmp=0;
    printf("before:a=%d b=%d\n",a,b);
//    tmp=a;
//    a=b;
//    b=tmp;
    //加减法-可能会溢出
//    a=a+b;
//    b=a-b;
//    a=a-b;
    //异或的方法
    a=a^b;
    b=a^b;
    a=a^b;
    printf("after:a=%d b=%d\n",a,b);
    return 0;

}


011
101
110=6=a

110
101
011=3=b


110
011
101
a=5

int main(){
	int num=0;
	int count=0;
	scanf("%d",&num);
	//统计num的补码中有几个1
	while(num){
		if(num%2==1)
			count++;
		num=num/2;

	}
	printf("%d\n",count);
	return 0;
}


-1的话就犯错误了

改进


    int i=0;
	int num=0;
	int count=0;
int main(){

	scanf("%d",&num);
	for(i=0;i<32;i++)
	{
		if(1==((num>>i)&1))
			count++;
	}
	printf("%d\n",count);
	return 0;
	
}


赋值操作符

赋值操作符是一个很棒的操作符,他可以让你得到一个你之前不满意的值,也就是你可以给自己重新赋值。

int main(){
    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;
    这样的写法是不是更加清晰爽朗而且易于调试

    return 0;
}
int main(){
    int a=10;
    a=a+2;
    a+=2;
    a=a>>1;
    a>>=1;
    a=a&1;
    a&=1;
    return 0;
}

符号:

+=

-=

*=

/=

%=

>>=

<<=

&=

|=

^=

单目操作符

单目操作符有哪些?

!                逻辑反操作

-                       负值

+                        正直

&                        取地址

sizeof                操作数的类型长度(以字节为长度)

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

--                        前置、后置--

++                        前置、后置++

*                间接访问操作符(解引用操作符)

(类型)        强制类型转换

int main(){
    int a=10;
//    printf("%d\n",!a);
    if(a){
        printf("呵呵\n");
    }
    if(!a){
        printf("hehe\n");
    }
}


int main(){
    int a=10;
    int* p=&a;//取地址操作符
    *p=20;//解引用操作符 a的值变为20
return 0;
}

int main(){
    int a=10;
    char c='r';
    char *p=&c;
    int arr[10]={0};
    //sizeof 计算的变量所占空间大小,单位是字节
    printf("%d\n",sizeof(a));//4
    printf("%d\n",sizeof(c));//1
    printf("%d\n",sizeof(p));//4
    printf("%d\n",sizeof(arr));//40
    return 0;
}

int main(){
    int a=10;
    char c='r';
    char *p=&c;
    int arr[10]={0};
    //sizeof 计算的变量所占空间大小,单位是字节
    printf("%d\n",sizeof(a));//4
        printf("%d\n",sizeof(int));//4
    printf("%d\n",sizeof(c));//1
        printf("%d\n",sizeof(char));//4
    printf("%d\n",sizeof(p));//4
        printf("%d\n",sizeof(char));//4
    printf("%d\n",sizeof(arr));//40
        printf("%d\n",sizeof(int[10]));//4
    return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1936091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通信流程:https【SSL/TLS】,git仓库【https/SSH】,蓝牙【面对面快传/AirDrop】

目录 HTTPS HTTP&#xff08;80端口&#xff09; SSL/TLS协议&#xff08;传输层&#xff0c;443端口&#xff09; 密文传输&#xff1a;SSL的后续版本TLS TLS1.2握手 1.摘要算法(散列函数 Hash Function)&#xff1a;验证信息的完整性&#xff0c;不可逆 第三方认证 引…

GO:Socket编程

目录 一、TCP/IP协议族和四层模型概述 1.1 互联网协议族&#xff08;TCP/IP&#xff09; 1.2 TCP/IP四层模型 1. 网络访问层&#xff08;Network Access Layer&#xff09; 2. 网络层&#xff08;Internet Layer&#xff09; 3. 传输层&#xff08;Transport Layer&#…

kotlin compose 实现应用内多语言切换(不重新打开App)

1. 示例图 2.具体实现 如何实现上述示例,且不需要重新打开App ①自定义 MainApplication 实现 Application ,定义两个变量: class MainApplication : Application() { object GlobalDpData { var language: String = "" var defaultLanguage: Strin…

你不是拖延,是没找对感觉!

在这个快节奏的时代&#xff0c;学习效率成为了我们每个人都渴望提升的关键能力。如何通过训练潜意识、深化知识印象、调整学习模式、找到适合自己的学习方法&#xff0c;以及利用倒计时硬逼法来提高执行力&#xff1f; 1. 训练潜意识&#xff1a;形成习惯 习惯的力量是巨大的…

使用python的pillow库生成图像验证码

一、pillow库 Pillow库&#xff1a;是一个功能强大的Python图像处理库&#xff0c;它提供了丰富的图像处理功能&#xff0c;使得用户能够方便地使用Python对图像进行各种操作。 二、图像验证码的分析 首先需要一个图像&#xff0c;图像上需要绘制验证码&#xff0c;还需要任意多…

博客最细 STM32CubeProgrammer 软件使用教程 二(学不会举报我)

前言&#xff1a;编写不易&#xff0c;仅供学习&#xff0c;参考&#xff0c;请勿转载 前言&#xff1a;本篇教程是 STM32CubeProgrammer 软件使用教程二&#xff0c;通过本篇你可以学习到&#xff0c;使用STM32CubeProgrammer读取 flash RAM&#xff0c;开启读写保护&#x…

科普文:TaobaoVM信息收集

网上关于TaobaoVM的信息很少&#xff0c;只有一个简介&#xff0c;就没有其他信息。毕竟这是别人企业自己的jvm&#xff0c;不可能公开。 Taobao VM 由AliJVM团队发布。阿里&#xff0c;国内使用Java最强大的公司&#xff0c;覆盖云计算、金融、物流、电商等众多领域&#xf…

Python和C++行人轨迹预推算和空间机器人多传感融合双图算法模型

&#x1f3af;要点 &#x1f3af;双图神经网络模型&#xff1a;最大后验推理和线性纠错码解码器 | &#x1f3af;重复结构和过约束问题超图推理模型 | &#x1f3af;无向图模型变量概率计算、和积消息传播图结构计算、隐马尔可夫模型图结构计算、矩阵图结构计算、图结构学习 |…

数据库MySQL学习第一天|了解数据库、数据类型、存储引擎、sql语言

文章目录 了解数据库什么是数据库数据库分类MySQL概念 数据类型整数类型小数类型日期类型文本,二进制类型 存储引擎种类引擎选择 sql主键和外键主键设计原则选取策略 外键索引 表与表的关联在语法上关联关系sql约束sql注入聚合函数常见查询关键字 了解数据库 什么是数据库 概…

网络安全协议系列

目录 一、安全协议的引入 1.TCP/IP协议族中普通协议的安全缺陷 1.信息泄露 2.信息篡改 3.身份伪装 4.行为否认 2.网络安全需求 二、网络安全协议的定义 三、构建网络安全协议所需的组件 1.加密与解密 2.消息摘要 3.消息验证码 4.数字签名 5.密钥管理 1.建立共享…

关于C#多个文本框输入的问题

&#x1f3c6;本文收录于《CSDN问答解答》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&…

堆排序基本思想以及代码实现

1、基本思想 堆排序是利用堆这种数据结构而设计的一种排序算法&#xff0c;堆排序是一种选择排序&#xff0c;它的最坏&#xff0c;最好&#xff0c;平均时间复杂度均为O(n*logn)&#xff0c;它也是不稳定排序。 堆是具有以下性质的完全二叉树&#xff1a;每个结点的值都大于或…

Vue3路由如何携带 # 路由模式选择

vue3中创建路由的时候&#xff0c;有两种可选模型 hash模式、HTML5模式、服务端渲染模式 createWebHashHistory&#xff08;hash模式&#xff09; const router createRouter({// hash模式&#xff0c;带 # 号history: createWebHashHistory(), //函数可携带参数&#xff0c;…

C++11 容器emplace方法刨析

如果是直接插入对象 push_back()和emplace_back()没有区别但如果直接传入构造函数所需参数&#xff0c;emplace_back()会直接在容器底层构造对象&#xff0c;省去了调用拷贝构造或者移动构造的过程 class Test { public:Test(int a){cout<<"Test(int)"<<…

使用Web控制端和轻量级客户端构建的开放Web应用防火墙(OpenWAF)

目录 1. 简介2. 项目结构3. Web控制端3.1. 功能概述3.2. 审计&#xff08;攻击&#xff09;日志查看3.3. 多个WAF的集中监控和操作3.4. 使用socket进行封装3.5. 日志的高效存储和检索&#xff08;Redis&#xff09; 4. 轻量级客户端4.1. 功能概述4.2. 对Web程序的防护4.3. 网络…

36.UART(通用异步收发传输器)-RS232(3)

&#xff08;1&#xff09;串口发送模块visio视图&#xff1a; &#xff08;2&#xff09;串口发送模块Verilog代码: /* 常见波特率&#xff1a; 4800、9600、14400、115200 在系统时钟为50MHz时&#xff0c;对应计数为&#xff1a; (1/4800) * 10^9 /20 -1 10416 …

鸿蒙语言基础类库:【@system.vibrator (振动)】

振动 说明&#xff1a; 本模块首批接口从API version 4开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。从API Version 8开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.vibrator]。该功能使用需要对应硬件支持&#xff0c;仅支持…

学生信息管理系统-优化版

springbootthymeleafmybatis 记录一下闲来无事&#xff0c;将之前做的1.0页面优化。 一、【管理员】首页 1、增加了【批量删除】、【导出学生信息】、【分页】、【统计及格率、平均分、优秀率】等功能。 2、将页面样式优化了一下&#xff0c;做的好看些 原来&#xff1a; 现…

.NET C# 配置 Options

.NET C# 配置 Options 使用 options 模式可以带来许多好处&#xff0c;包括清晰的配置管理、类型安全、易于测试和灵活性。但在使用过程中&#xff0c;也需要注意配置复杂性、性能开销和依赖框架等问题。通过合理设计和使用&#xff0c;可以充分发挥 options 模式的优势&#…

【链表】算法题(二) ----- 力扣/牛客

一、链表的回文结构 思路&#xff1a; 找到链表的中间节点&#xff0c;然后逆置链表的后半部分&#xff0c;再一一遍历链表的前半部分和后半部分&#xff0c;判断是是否为回文结构。 快慢指针找到链表的中间节点 slow指针指向的就是中间节点 逆置链表后半部分 逆置链表后半部分…