八、C语言:操作符详解

一、移位操作符

1.1左移操作

左边丢弃,右边补0

1.2右移操作

算数右移:右边丢弃,左边补原符号位

逻辑右移:右边丢弃,左边补0

int main()
{int a = -1;int b = a >> 1;printf("b=%d\n",b);return 0;
}

原码:10000000 00000000 00000000 00000001

反码:11111111 11111111 11111111 11111110

补码:11111111 11111111 11111111 11111111

右移一位,左边补符号位1,仍然为11111111 11111111 11111111 11111111

输出:b=-1

说明输出采用的是算数右移,a的值本身不发生变化。没有移动负数位


二、编程题

2.1 不能创建临时变量,实现两个变量的交换

方法1:(缺陷:数值太大的时候容易溢出)

int a = 3;
int b = 5;
a = a + b;    //存放a与b的和
b = a - b;    //(a+b)-b=a
a = a - b;    // (a+b)-a

方法2:

int a = 3;
int b = 5;
a = a^b;
b = a^b;   //b = (a^b)^b=a
a  =a^b;   //a = (a^b)^a=b

补充:

0与任意数异或都为他本身    a^0=a;

任意数与他本身异或都为0    a^a=0;


三、单目运算符

!、-、+、&、sizeof、~、++、--、*、(类型)

3.1 sizeof(字节为单位)

sizeof返回的是一个无符号整数

%d打印的是有符号整数,%u打印的是无符号整数

int a = 10;
int arr[10] = {0};
printf("%d\n", sizeof(arr));
printf("%d\n", sizeof(int [10]));  //40printf("%d\n", sizeof(a));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof a);    //sizeof是操作符,不是函数
printf("%d\n", sizeof int);  //err

3.2 sizeof(s = a+2)

short s = 5;
int a = 2;
printf("%d\n", sizeof(s = a+2));
printf("%d\n", s);

//sizeof括号中的表达式不参与运算

sizeof(s = a+2)在编译时就已经完成,计算的就是s的大小;s = a+2在运行时计算,所以到运行时 没有s = a+2


3.3 ~按位取反

int main()
{int a = 0;printf("%d",~a);return 0;
}

整型数据在计算机中是以补码的形式存在的,按位取反是对补码进行取反

0的原码、反码、补码

0+:00000000  00000000  00000000

0-:10000000   11111111    00000000

0+和0-的补码都是00000000


a的大小为4个字节,共32位

// 0的补码:     00000000 00000000 00000000 00000000
//~0的补码:    11111111 11111111 11111111 11111111
//~0的反码: 11111111 11111111 11111111 11111110 
//~0的原码: 10000000 00000000 00000000 00000001 = -1


四、逻辑操作符

int main()
{int i = 0, a = 0, b = 2, c = 3, d = 4;i = a++ && ++b && d++;printf("a = %d\n b = %d\n c = %d\nd = %d\n", a, b, c, d);return 0;
}

输出:      a = 1
                 b = 2
                 c = 3
                 d = 4

分析:    i = a++ && ++b && d++;  0&&()结果一定为0,所以后面的式子不在进行运算

a的值先为0与后面的式子&&,在+1,b,d的值不发生变化


五、逗号表达式

从左向右依次计算,但整个表达式的结果是最后一个表达式的结果

int a = 3;
int b = 5;
int c = 0;
int d = (c = 5, a = c + 3, b = a - 4, c += 5);
printf("%d\n", d);  //10
a = get_val();
count_val(a);
while(a>0)
{//业务处理a = get_val();count_val(a);
}while( a = get_val(),count_val(a),a>0)
{//业务处理
}

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

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

相关文章

【Linux进程篇】Linux进程管理应用——虚假的shell脚本

W...Y的主页 😊 代码仓库分享💕 前言:我们已经了解了进程的工作原理,并且学习了进程创建、进程终止、进程等待以及进程程序替换。为了更好的巩固这些知识,我们可以创建一个简易的shell命令行。 目录 做一个简易的s…

GAT1399协议分析(六)--校时

一、官方消息定义 DeviceIDType :GA/T1400.1,采集设备、 卡口点位、 采集系统、分析系统、视图库、应用平台等设备编码规则 TimeCorrectModeType: dateTime时间格式: TimeZone:时区,GAT1400里面没有找到具体内容&…

卧式搅拌机:一键自动称重轻松搞定

在现代化工业生产中,G效、精准的设备是提高生产效率、降低生产成本。近年来,卧式搅拌机一键自动称重包装机的出现,无疑为众多行业带来了变革。这种集搅拌、称重、包装于一体的智能化设备,以其G效、便捷、精准的特点,迅…

六轴机器手臂运动控制——直流伺服反馈系统设计(比赛项目计划书+设计总结+硬件+源代码+上位机等)

TW的硬件一直很强,这是难得的硬件创新比赛的优秀作品,资料非常完整理。 硬件设计,源码,项目计划书,甚至包含了事后的复盘总结文档。 是不可多得的好资料。 项目系统框架图 1. 硬件系统框架图 (请以方块图形式呈现) …

idea的代码没有提交到仓库怎么撤回到本地?

代码已经提交到变更列表但是还没有push推送到仓库上,可以用这个方法 点击日志-右键要撤回的记录-选择撤销提交 撤销的又回到本地变更 当然你只能撤销自己提交的,别人的你撤销不了

python-题库篇-为什么数组下标从0 开始而不是 1

为什么很多编程语言要把 0 作为第一个下标索引,而不是直观的 1 呢? 这个问题 Dijkstra 已经解答过了,没错,就是你知道的 Dijkstra,Dijkstra 最短路径算法,荷兰语全名是 Edsger Wybe Dijkstra,于…

定制高温隧道炉,如何判断质量好坏

在现代工业生产中,高温隧道炉扮演着不可或缺的角色。对于特定工艺要求,如陶瓷烧制、金属热处理等,定制化的高温隧道炉更是不可或缺。然而,面对市场上琳琅满目的产品,如何判断高温隧道炉的质量好坏成为了企业决策者面临…

js终止递归

终止递归 1. 实现目标:js 编写递归方法 查找指定节点; 2. 需解决问题:找到所需节点后,递归不会终止,直到所有节点遍历完成后才会停止,会消耗性能 3. 解决方案:优化递归方法,在找到…

解决vscode终端不显示conda环境变量名称问题【详细步骤!实测可行!!】

最近在使用Visual Studio Code (VSCode) 时候,发现终端没有正确显示激活的conda环境名称,搜了一下,找到原因,记录一下,如果有人也遇到同样的问题,可以收藏一下。   分别两种情况,一是windows系…

一周学会Django5 Python Web开发 - Django5内置Auth认证系统-用户登录实现

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计57条视频,包括:2024版 Django5 Python we…

JVM学习-内存泄漏

内存泄漏的理解和分类 可达性分析算法来判断对象是否是不再使用的对象,本质都是判断一上对象是否还被引用,对于这种情况下,由于代码的实现不同就会出现很多内存泄漏问题(让JVM误以为此对象还在引用,无法回收,造成内存泄…

旭日X3与英伟达Orin NX通过TCP传输图片

观前提醒:本文主要内容为使用Python在局域网内建立TCP连接并传输图片信息,计算机为一块旭日X3和一块英伟达Orin NX。 一、什么是TCP TCP(传输控制协议)是一种可靠的、面向连接的协议,它确保数据包的顺序传输和完整性…

关于教务排课的那些事

在办学过程中,你是否被如下问题困扰? 1、排课功率低: 为了确保师资资源得到充分利用,教务教师排课要求了解每一个全职和兼职教师,了解每一个人的时刻组织和带班状况,因而在排课的时分需求处理很多的信息&a…

【Java数据结构】二叉树详解(四)

🔒文章目录: 1.❤️❤️前言~🥳🎉🎉🎉 2.给定一个二叉树, 找到该树中两个指定节点的最近公共祖先 2.1第一种思路 2.2第二种思路 3.根据一棵树的前序遍历与中序遍历构造二叉树 4.根据一棵树的中序…

图文型LED显示屏的结构与安装

随着科技的不断进步,LED显示屏已成为商业广告、公共信息显示等领域不可或缺的一部分。图文型LED显示屏以其独特的优势和多样化的应用场景,受到了市场的广泛欢迎。本文将详细介绍图文型LED显示屏的结构特点、工作原理以及安装指南。 1、图文型LED显示屏的…

跨境电商|Facebook Marketplace怎么做?

2016 年,Facebook打造了同名平台 Facebook Marketplace。通过利用 Facebook 现有的庞大客户群,该平台取得了立竿见影的成功,每月访问量将超过 10 亿。对于个人卖家和小企业来说,Facebook Marketplace是一个不错的销货渠道&#xf…

通过ssr-echarts,服务端生成echarts图

ssr-echarts :一个开源项目,它能够服务端渲染 ECharts 图表,并直接生成 PNG 图片返回。该项目提供了多种主题,并且支持 GET 和 POST 请求。如果参数较多,建议使用 POST 方法。用户可以自己部署这个服务。 1. 服务端安装…

Three.js-实现加载图片并旋转

1.实现效果 2. 实现步骤 2.1创建场景 const scene new THREE.Scene(); 2.2添加相机 说明: fov(视场角):视场角决定了相机的视野范围,即相机可以看到的角度范围。较大的视场角表示更广阔的视野,但可能…

SBOM是如何帮助医疗器械制造商提高产品透明度的?

SBOM(软件物料清单)通过以下方式帮助医疗器械制造商提高产品透明度: 1. 详细记录软件组成 SBOM详细列出了医疗器械所使用的所有软件组件、版本、作者、许可证信息等。这使得制造商能够清晰地了解产品的软件组成,包括每个组件的来…

基于springboot实现民族婚纱预定系统项目【项目源码+论文说明】

基于springboot实现民族婚纱预定系统的设计演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本民族婚纱预定系统就是在这样的大环境下诞生,其可…