当前位置: 首页 > news >正文

鹏哥C语言68-70---位操作符+单目操作符+关系操作符

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <string.h>
#include <time.h>

//--------------------------------------------------------------------------------------------------------4.位操作符
// &----按(2进制补码)位与(全1 为 1)
// |  ----按(2进制补码)位或(有1则1,全0则0)
//^ ----按(2进制补码)位异或(相同为0,相异为1)
//------------------------------- &----按(2进制补码)位与

int main()
{int a = 3; //32个bit位//00000000000000000000000000000011-------3的补码int b = -5;//10000000000000000000000000000101-------  -5的原码//11111111111111111111111111111010-------  -5的反码//11111111111111111111111111111011-------  -5的补码int c = a & b;//00000000000000000000000000000011-------3的补码//11111111111111111111111111111011-------  -5的补码//3的补码和-5的补码按位与&(同时为1才为1)//00000000000000000000000000000011---高位为0,是正数,正数原反补相同 3printf("c=%d\n", c);  // 输出3//%d代表打印一个有符号的整数(原码)int d = a | b;//00000000000000000000000000000011-------3的补码//11111111111111111111111111111011-------  -5的补码//3的补码和-5的补码按位或 |(有1则1,全0则0)//11111111111111111111111111111011---高位为1,是负数,找源码//10000000000000000000000000000101---   -5printf("d=%d\n", d);  // 输出-5int e = a ^ b;//00000000000000000000000000000011-------3的补码//11111111111111111111111111111011-------  -5的补码//3的补码和-5的补码按位或 ^(相同为0,相异为1)//11111111111111111111111111111000---高位为1,是负数,找源码//10000000000000000000000000001000---   -8printf("e=%d\n", e);  // 输出-8return 0;
}

// 不创建临时变量,实现两个数的交换
//3^3
//011
//011
//000=0
//0^5
//000
//101
//101=5
//3^3^5=5
//3^5^3
//011
//101
//110
//011
//101=5
//异或^操作符支持交换律//实际的开发过程中,通常用方法1,创建临时变量去实现两个数的交换

int main()
{int a = 3;int b = 5;//方法1(创建临时变量)int c = 0;printf("交换前a=%d b=%d\n", a, b);c = a;a = b;b = c;printf("交换后a=%d b=%d\n", a, b);//方法2(可能会有溢出)printf("交换前a=%d b=%d\n", a, b);a = a + b;b = a - b;a = a - b;printf("交换后a=%d b=%d\n", a, b);//方法3(异或^操作符)printf("交换前a=%d b=%d\n", a, b);a = a ^ b;//a=3^5b = a ^ b;//b=3^5^5-->b=3a = a ^ b;//a=3^5^3-->a=5printf("交换后a=%d b=%d\n", a, b);return 0;
}

//--------------------------------------------------------------------练习
//编写代码实现:求一个整数存储在内存中的二进制中 1的个数
//求补码中1的个数

int main()
{int a = 0;scanf("%d", &a);return 0;
}

//---------------------------------------------------------------------------------------------------------5.赋值操作符
//=赋值
//与==判断相对 区分


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

int main()
{//---------------------------------------------操作符 !int flag = 3;//C语言中,0表示假,非0表示真if (flag) // 如果flag为真,进入if{}if (! flag) // 如果flag为假,进入if{}//---------------------------------------------操作符   +int a = +10;int b = +a;printf("%d\n", a); //10printf("%d\n", b); //10// --------------------------------------------操作符   -int c = -10;int d = -c;printf("%d\n", c); //-10printf("%d\n", d); //10//----------------------------------------------操作符   &printf("%p\n", &a);//a是整型,占4个字节,取地址取的是第一个字节的地址int* p = &a;  //p就是指针,p的类型是int*,表示p是指针变量//---------------------------------------------操作符  sizeof// 计算的变量所占内存的大小int n = sizeof(a); //计算 a 所占内存的大小,单位是字节printf("%d\n", n);// 4  // 计算类型所创建的变量占据空间的大小int m = sizeof(int);printf("%d\n", m);// 4  // 计算整个数组的大小int arr[10] = { 0 };printf("%d\n", sizeof(arr)); //40//----------------------------------------------操作符  ~  //按位取反(二进制位)int x = 0;printf("%d\n", ~x);// -1//00000000000000000000000000000000 ---0的补码//11111111111111111111111111111111 ---按位取反//还原成源码 -1再取反//11111111111111111111111111111110//10000000000000000000000000000001--- -1int y = 3;printf("%d\n", ~y);// -4//00000000000000000000000000000011--- 3的补码//~3//11111111111111111111111111111100--- 补码//恢复原码//11111111111111111111111111111011//10000000000000000000000000000100----4return 0;
}

//--------------------------------------------------------------------------------------练习
//把2进制位里的0改成1,就用 | 或上1
//把2进制位里的1改成0,就用 & 与上0

int main()
{int z = 13;z |= (1 << 1);//00000000000000000000000000001101---13的补码//  |  (全1则1)//00000000000000000000000000000010(可以由 1的补码向左移动1位 得到这个)// =//00000000000000000000000000001111--15printf("%d\n", z); //15//把2进制位里的0改成1,就用 |或上1int p = 13;p |= (1 << 4);//00000000000000000000000000001101---13的补码// |(有1则1,全0则0)//00000000000000000000000000010000(可以由 1的补码向左移动1位 得到这个)// =//00000000000000000000000000011101---29的补码printf("%d\n", p); //29p &= ~(1 << 4);//00000000000000000000000000011101---29的补码//&(全1 为 1)//11111111111111111111111111101111(由00000000000000000000000000010000按位取反得到)//=//00000000000000000000000000001101---13的补码printf("%d\n", p); //13return 0;
}
test()
{}int main()
{//-------------------------------------------------操作符  ++  int a = 3;int b = ++a; //前置++, 先++,后使用//a=a+1,b=aprintf("a=%d\n", a); // 4printf("b=%d\n", b);// 4int c = 3;int d = c++; //后置++, 先使用,后++// d=3, c=3+1printf("c=%d\n", c); // 4printf("d=%d\n", d);// 3//-------------------------------------------------操作符  --  int aa = 3;int bb = --aa; //前置--, 先--,后使用//aa=aa-1,bb=aaprintf("aa=%d\n", aa); // 2printf("bb=%d\n", bb);// 2int cc = 3;int dd = cc--; //后置--, 先使用,后--// dd=3, cc=3-1printf("cc=%d\n", cc); // 2printf("dd=%d\n", dd);// 3int x = 10;printf("%d\n", x--); //10 因为x先使用,使用完再--printf("%d\n", x); // 9int y = 10;test(y--); //调用函数,test接收到的 y 是10,因为是先使用,后--printf("%d\n", y); //9//-----------------------------------------------操作符 *  //间接访问操作符(解引用操作符),与指针配合使用int z = 10;int* p = &z; //把 z 的地址存到 p 中*p; //通过p的地址,找到他所指向的对象 10printf("z=%d\n", z);        //10printf("&z=%p\n", &z);  //00000001774FFA84printf(" p=%d\n", p);      //00000001774FFA84printf("*p=%d\n", *p);    //10return 0;
}
int main()
{//-----------------------------------------------()  强制类型转换int a = (int)3.14; //把3.14强制转化为整型printf("%d\n", a);//  3//随机数的生成srand((unsigned int)time(NULL));//把srand 的返回值强制转换为 unsigned intreturn 0;
}

//sizeof是操作符,不是函数
//strlen是库函数,用来求字符串长度

int main()
{int a = -10;int* p = NULL;printf("%d\n", !2);printf("%d\n", !0);a = -a;p = &a;printf("%d\n", sizeof(a));printf("%d\n", sizeof(int));printf("%d\n", sizeof a);//这样写行不行?   可以,证明了 sizeof是操作符,不是函数,函数后的括号不可以省略//printf("%d\n", sizeof int);//这样写行不行?  不可以return 0;
}

//---------------------------------------------------------------------------------6.2 sizeof 和 数组

void test1(int arr[])
{printf("sizeof(arr)(2)=%d\n", sizeof(arr));//(2)--8 /4
}void test2(char ch[])
{printf("sizeof(ch)(4)%d\n", sizeof(ch));//(4)--8 / 4
}int main()
{int arr[10] = { 0 };char ch[10] = { 0 };printf("sizeof(arr)(1)=%d\n", sizeof(arr));//(1)---40printf("sizeof(ch)(3)=%d\n", sizeof(ch));//(3)---10test1(arr);test2(ch);return 0;
}

// (1)(2)(3)(4)分别输出多少
//(x64环境下,一个地址8个字节)
//(x86环境下,一个地址4个字节)


//--------------------------------------------------------------------------------------------------7. 关系操作符
//>
//>=
//<
//<=
//!=   用于测试不相等
//==  用于测试相等

//两个字符串比较相等用 strcmp 库函数

//-----------------------------------------------------------------------------------------------------8. 逻辑操作符
//&&
//  ||
 

相关文章:

鹏哥C语言68-70---位操作符+单目操作符+关系操作符

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <time.h> //--------------------------------------------------------------------------------------------------------4.位操作符 // &----按&#xff08;2进制…...

showdoc二次开发

showdoc用的vue版本老&#xff0c;需要安装老版本nodejs&#xff0c;比如node 14.21.3 win32-x64-93_binding.node问题 https://github.com/sass/node-sass/releases 下载 web_src\node_modules\node-sass\vendor\win32-x64-93 下面重命名为binding.node 代理到php后端&…...

力扣16~20题

题16&#xff08;中等&#xff09;&#xff1a; 思路&#xff1a; 双指针法&#xff0c;和15题差不多&#xff0c;就是要排除了&#xff0c;如果total<target则排除了更小的&#xff08;left右移&#xff09;&#xff0c;如果total>target则排除了更大的&#xff08;rig…...

Pikachu-Sql-Inject -基于boolian的盲注

基于boolean的盲注: 1、没有报错信息显示&#xff1b; 2、不管是正确的输入&#xff0c;还是错误的输入&#xff0c;都只显示两种情况&#xff0c;true or false&#xff1b; 3、在正确的输入下&#xff0c;输入and 1 1/and 1 2发现可以判断&#xff1b; 布尔盲注常用函数&…...

最后30天,你的系统集成项目管理工程师备考进度到哪儿了?

十一长假归来好&#xff01; 此次归来之后&#xff0c;2024年下半年软考倒计时就从4字头切换到了3字头&#xff0c;今天距离考试还有32天&#xff01; 那么问题来了&#xff0c;临近考试还有30天左右的时候&#xff0c;你的备考进度到哪里了呢&#xff1f; 其实无论目前你的实际…...

网络安全事件的发生,主要原因是什么

网络安全事件的发生&#xff0c;主要原因涉及多个方面&#xff0c;包括技术漏洞、人为因素、经济利益驱动、恶意软件和病毒威胁、社会工程学攻击、内部人员恶意行为、供应链安全问题以及法律法规的不完善等。以下是对这些原因的详细分析&#xff1a; 技术漏洞&#xff1a; 软件…...

【leetcode】274.H指数

为了方便&#xff0c;将 citations 记为 cs。 所谓的 h 指数是指一个具体的数值&#xff0c;该数值为“最大”的满足「至少发表了 x 篇论文&#xff0c;且每篇论文至少被引用 x 次」定义的合法数&#xff0c;重点是“最大”。 用题面的实例 1 来举个 &#x1f330;&#xff0…...

1.Python 引入(字面量、注释、变量、数据类型、数据类型转换、标识符、运算符、字符串扩展)

一、字面量 1、基本介绍 在代码中&#xff0c;被写直接下来的、不需要通过变量存储的值&#xff0c;称之为字面量 2、常用值类型 类型说明数字&#xff08;Number&#xff09;整数&#xff08;int&#xff09;&#xff0c;例如&#xff1a;10、-10浮点数&#xff08;float&…...

【AI知识点】梯度消失(Vanishing Gradient)和梯度爆炸(Exploding Gradient)

梯度消失&#xff08;Vanishing Gradient&#xff09; 和梯度爆炸&#xff08;Exploding Gradient&#xff09; 是神经网络训练中的常见问题&#xff0c;特别是在深层神经网络&#xff08;DNN&#xff09;或递归神经网络&#xff08;RNN&#xff09;中。这两者主要与反向传播算…...

在 ArkTS 网络请求中,重新封装一下 http 模块

在ArkTS中&#xff0c;重新封装http模块可以提供一个更简洁、更易于使用的API&#xff0c;同时隐藏底层细节&#xff0c;使开发者能够更专注于业务逻辑。以下是一个简单的示例&#xff0c;展示了如何重新封装鸿蒙系统的kit.NetworkKit中的http模块&#xff1a; // 创建一个新的…...

Microsoft 更新 Copilot AI,未來將能使用語音並看到你瀏覽的網頁

不過受到 Recall 事件的影響&#xff0c;更新的推出將更緩慢謹慎。 Microsoft 也同步對其網頁版及行動版的 Copilot AI 進行大改版。這主要是為網頁版換上了一個較為簡單乾淨的介面&#xff0c;並增加了一些新的功能&#xff0c;像是 Copilot Voice 能讓你與 AI 助手進行對話式…...

系统架构设计师-论文题(2021年下半年)

1.试题一 论面向方面的编程技术及其应用针对应用开发所面临的规模不断扩大、复杂度不断提升的问题&#xff0c;面向方面的编程Aspect Oriented Programming,AOP技术提供了一种有效的程序开发方法。为了理解和完成一个复杂的程序&#xff0c;通常要把程序进行功能划分和封装。一…...

selenium的webdriver常用方法和属性介绍(2)

selenium的webdriver介绍 从selenium导入webdriver模块&#xff0c;在pycharm中跳转webdriver模块的__init__.py文件&#xff0c;内容如图所示&#xff1a;从selenium包的子目录中导入了很多模块并做了重命名&#xff0c;用于支持如下 Chrome/Edge/Ie/Firefox/Safari浏览器。 使…...

73.【C语言】C/C++的内存区域划分

目录 1.内存里的几个区域 2.示意图 3.解释 1.内存里的几个区域 除了耳熟能详的栈区,堆区,静态区,还有内核空间,内存映射段,数据段,代码段 2.示意图 3.解释 栈区(stack area):局部变量,函数参数,返回数据,返回地址 内存映射段:将文件映射到内存 映射的含义: 如果看过李忠…...

k8s 中存储之 hostPath 卷

目录 1 hostPath 卷介绍 2 hostPath 卷实际应用操作 2.1 创建 pod 资源类型 2.2 修改清单文件增加 hostPath 对应的参数配置 2.3 查看是否创建 卷 和 pod 2.4 创建发布文件测试是否正常访问 1 hostPath 卷介绍 EmptyDir中数据不会被持久化&#xff0c;它会随着Pod的结束而销…...

Cherno游戏引擎笔记(73~90)

------- scene viewport ---------- 》》》》做了两件事&#xff1a;设置视口和设置相机比例 》》》》为什么要设置 m_ViewportSize 为 glm::vec2 而不是 ImVec2 ? 因为后面需要进行 ! 运算&#xff0c;而 ImVec2 没有这个运算符的定义&#xff0c;只有 glm::vec2 有这个运算…...

helm 测试卸载或删除(redis)

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/02/07 18:30 查看redis 集群实例 kubectl get all -n redis 卸载集群实例 helm uninstall redis -n redis 删除pvc kubectl get pvc -n redis kubectl delete pvc redis-data-redis-master-0 redis-data-redis-replicas…...

关于Qt音乐播放器进度条拖拽无用的问题解决方案

在使用Qt编写音乐播放器的时候&#xff0c;进度条关联播放音乐基本是必须的。那么在设计的过程中你可能会碰到一个奇怪的问题就是拖拽进度条的时候&#xff0c;可能会报错如下&#xff1a; 然后音乐就卡着不动了。。。 connect(ui->volume_toolButton,&VolumeToolBtn::…...

Redis:初识Redis

Redis&#xff1a;初识Redis Redis 介绍分布式架构Redis特性安装Redis Redis 介绍 在官网中&#xff0c;是如下介绍Redis的&#xff1a; in-memory data store used by millions of developers as a cache, vector database, document database, streaming engine, and messag…...

【React】增量传输与渲染

增量传输 增量传输是一种高效的文件传输方式&#xff0c;其核心原理在于只传输文件中发生变化的部分&#xff0c;而不是整个文件。以下是增量传输的详细解析&#xff1a; 定义与原理&#xff1a; 增量传输通过比对原始文件和目标文件&#xff0c;找出两者之间的差异部分&#…...

Vim 调用外部命令学习笔记

Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...