八、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]));  //40

printf("%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)
{
    //业务处理
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

贪吃蛇小游戏简单制作-C语言

文章目录 游戏背景介绍实现目标适合人群所需技术浅玩Window API什么是API控制台程序窗口大小,名称设置 Handle(句柄)获取句柄 坐标结构体设置光标位置 光标属性获取光标属性设置光标属性 按键信息获取 贪吃蛇游戏设计游戏前的初始化设置窗口的大小和名称本地化设置 宽字符Waht …

采用PHP开发的一套(项目源码)医疗安全(不良)事件报告系统源码:统计分析,持续整改,完成闭环管理

采用PHP开发的一套(项目源码)医疗安全(不良)事件报告系统源码:统计分析,持续整改,完成闭环管理 医疗安全确实是医疗领域中不容忽视的重要问题。医院不良安全事件,即医疗质量安全不良…

宋街宣传活动-循环利用,绿色生活

善于善行回收团队是一支致力于推动环保事业,积极倡导和实践绿色生活的志愿者队伍。我们的宗旨是通过回收再利用,减少资源浪费,降低环境污染,同时提高公众的环保意识,共同构建美丽和谐的家园。 善于善行志愿团队于2024年…

免费、无广告、界面简洁、简单好用的轻量级思维导图软件

一、简介 1、一款免费、无广告、界面简洁、简单好用的轻量级思维导图软件。它目前支持 Windows、MacOS 平台。其中 Windows 版大小在 104MB 左右(UWP 应用),Mac 版大小在 167MB 左右。 二、下载 1、下载地址: MindAtom官网&#…

【保姆级讲解下QT6.3】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

用户和权限

Linux的root用户 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理 超级管理员: root用户拥有最大的系统操作权限(不建议长期使用root用户,避免带来系统损坏)普通用户的权限: 一般在其HOME目录内是不受限的,在HOME目录外仅有只读和执行权限&#x…

go-zero整合Excelize并实现Excel导入导出

go-zero整合Excelize并实现Excel导入导出 本教程基于go-zero微服务入门教程,项目工程结构同上一个教程。 本教程主要实现go-zero框架整合Excelize,并暴露接口实现Excel模板下载、Excel导入、Excel导出。 go-zero微服务入门教程:https://blo…

【深度学习】AI换脸,EasyPhoto: Your Personal AI Photo Generator【一】

论文:https://arxiv.org/abs/2310.04672 文章目录 摘要IntroductionTraining Process3 推理过程3.1 面部预处理3.3 第二扩散阶段3.4 多用户ID 4 任意ID5 实验6 结论 下篇文章进行实战。 摘要 稳定扩散Web UI(Stable Diffusion Web UI,简称…

MYSQL八、MYSQL的SQL优化

一、SQL优化 sql优化是指:通过对sql语句和数据库结构的调整,来提高数据库查询、插入、更新和删除等操作的性能和效率。 1、插入数据优化 要一次性往数据库表中插入多条记录: insert into tb_test values(1,tom); insert into tb_tes…

CyberDAO:引领Web3时代的DAO社区文化

致力于Web3研究和孵化 CyberDAO自成立以来,致力于推动Web3研究和孵化,吸引了来自技术、资本、商业、应用与流量等领域的上千名热忱成员。我们为社区提供多元的Web3产品和商业机会,触达行业核心,助力成员捕获Web3.0时代的红利。 目…

远程链接服务 ssh

① 指定用户身份登录 ssh root10.36.105.100 ssh jim10.36.105.100 ② 不登陆远程执行命令 ssh root10.36.105.100 ls /opt ③ 远程拷贝 scp -r // 拷贝目录 -p // 指定端口 将本地文件拷贝给远程主机 scp -r /opt/test1 10.36.105.100:/tmp/// 将本…

Windows电脑清理C盘内存空间

ps:过程截图放在篇末 一、%tmp%文件 win R键呼出运行窗口,输入 %tmp% 自动进入tmp文件夹,ctrl A全选删除 遇到权限不足,正在运行,丢失的文件直接跳过即可 二、AppData文件夹 1、pipcache 在下列路径下面&…

小目标检测篇 | YOLOv8改进之空间上下文感知模块SCAM + 超轻量高效动态上采样DySample

前言:Hello大家好,我是小哥谈。小目标检测是计算机视觉领域中的一个研究方向,旨在从图像或视频中准确地检测和定位尺寸较小的目标物体。相比于常规目标检测任务,小目标检测更具挑战性,因为小目标通常具有低分辨率、低对比度和模糊等特点,容易被背景干扰或遮挡。本篇文章就…

Unity 实现WebSocket 简单通信——客户端

创建连接 ClientWebSocket socket new ClientWebSocket(); string url $"ws://{ip}:{port}"; bool createUri Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out Uri uri); if (createUri) {var task socket.ConnectAsync(uri, CancellationToken.None);task…

django学习入门系列之第二点《浏览器能识别的标签1》

文章目录 文件的编码(head)网站表头信息(head)标题&#xff08;body&#xff09;div和span往期回顾 文件的编码(head) <!--浏览器会以"UTF-8"这种编码来读取文件--> <meta charset"UTF-8">网站表头信息(head) <title>Title</title&…

Android帧绘制流程深度解析 (一)

Android帧绘制技术有很多基础的知识&#xff0c;比如多buffer、vsync信号作用等基础知识点很多笔记讲的已经很详细了&#xff0c;我也不必再去总结&#xff0c;所以此处不再过多赘述安卓帧绘制技术&#xff0c;基础知识这篇文章总结的很好&#xff0c;一文读懂"系列&#…

VBA即用型代码手册:删除空列Delete Empty Columns

我给VBA下的定义&#xff1a;VBA是个人小型自动化处理的有效工具。可以大大提高自己的劳动效率&#xff0c;而且可以提高数据的准确性。我这里专注VBA,将我多年的经验汇集在VBA系列九套教程中。 作为我的学员要利用我的积木编程思想&#xff0c;积木编程最重要的是积木如何搭建…

细说ARM MCU的串口接收数据的实现过程

目录 一、硬件及工程 1、硬件 2、软件目的 3、创建.ioc工程 二、 代码修改 1、串口初始化函数MX_USART2_UART_Init() &#xff08;1&#xff09;MX_USART2_UART_Init()串口参数初始化函数 &#xff08;2&#xff09;HAL_UART_MspInit()串口功能模块初始化函数 2、串口…

爱奇艺视频怎么转换成mp4格式,爱奇艺qsv转换mp4最简单方法

在数字化时代&#xff0c;视频格式的转换成为了我们日常生活中常见的需求。特别是对于那些经常从各大视频平台下载视频的朋友来说&#xff0c;将特定格式的视频转换为更通用的格式&#xff0c;如MP4&#xff0c;变得尤为重要。其中&#xff0c;qsv格式的视频转换就是一项常见的…

C++|哈希结构封装unordered_set和unordered_map

上一篇章&#xff0c;学习了unordered系列容器的使用&#xff0c;以及哈希结构&#xff0c;那么这一篇章将通过哈希结构来封装unordered系列容器&#xff0c;来进一步的学习他们的使用以及理解为何是如此使用。其实&#xff0c;哈希表的封装方式和红黑树的封装方式形式上是差不…