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

c语言操作符详解

 操作符详解

20df79a3aa584d458f41f61cd4fd01f3.png

59ccb1cafc44467090cbee4f0923881d.png

 1f9a8984a35849f7980572a5a7ee82d5.png

正数的原码反码补码相同

负数的原码最高位数是1,正数为0

 整数在内存中存储的是补码

ae916ba8b29b4805a5182aaa105c963b.png

负数的左移与右移,移的是补码,打印的是源码

补码-1取反就是原码。

左移有乘2的效果

22f45f0ad5d94130b0b112354ed389ce.png

左移和右移只针对整数。

vs里的右移操作赋采用的是算数右移,右边丢弃、左边补原符号位

符号位是根据正数还是负数来确定的,正数补0,负数补1.

657de460d8084c82a55f82dcaa8fb389.png

5d85f96f4a70465faa54f36d6000ab0e.png

总结:

计算的是以补码形式计算,打印的是以原码形式存在。

be7d6b6419ed43fb8ebdd09799e03fb8.png

cefaf8bc27a343c68243351d1bbb30fa.png

 计算的时候要用补码,因为整数在内存中存储的是补码。

按位与二个同时为1就得1,有一个不得1就为0.

9b0ce62655884c28bc695265ffb95a09.png

 取反的时候不要动符号位。

异或是相同为0,相异为1

e559e28e2129405abbf7b92c2ae88be1.png

1b312297a1de4e1fa6b9da33cd50f237.png

8d9d15b356c849f6bc389cc6cb264e46.png

0异或a是a  a异或a是0 

异或支持交换律

5167124baa004afa948ed23cedfb0153.png

统计二进制中有多少个1

96f47f4f881941e7b12b0f53a14caad9.png

任何一个数a按位与1如果==1就说明a的二进制最低是1

a&1==0 说明a的二进制最低位是0

c4a59502c50e4c1daba0bd08f226ad17.png

就比如这段二进制代码 a&1 第1位是0 就&1 得0 就跳过最低位,看第二位,如果第二位&1等于1就让COUNT++,一直循环下去。这样就可以知道这段二进制代码有多少个1了。

方法1 利用&和>>操作符计算出二进制代码有多少个1.

98906b083a2942ec8a1e26a350a1446c.png

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{int i = 0;int a = 0;while (~scanf("%d", &a)){int count = 0;for (i = 0; i < 32; i++){if ((a >> i) & 1 == 1){count++;}}printf("%d\n", count);}	return 0;
} 

46313fdf5f6d400692b37499f76a3e13.png

总结
把一个二进制向右移动i个位移到最低位和1进行按位与进行比,如果==1就说明二进制有1 

从右往左看,每次移到的位位数再增加,最高是32位

方法2:利用/2  %2的方法来

bf4d544d04d54c2bbc6551abe6f6f731.png

ee72854b22c845ad99a859e5a4f285ec.png

想得到二进制的每一位 /2  %2来解决这个问题

eeb6c6d905b2468eaa43cf6293695e0c.png

//考虑正负数问题
int count_one_bit(unsigned int n)
{int count = 0;while (n){if ((n % 2) == 1){count++;}n /= 2;}return count;
}
int main()
{int n = 0;scanf("%d", &n);int ret=count_one_bit(n);printf("%d\n", ret);return 0;
}

方法3

利用n=n&(n-1)来达到把n的二进制最右边的1去掉

比如n=-1

1111 n

1110 n-1

1110 n

1101 n-1

1100 n

1011 n-1

1000 n

0111 n-1

0000 n

利用这种效果来实现二进制代码有多少个1

55903e705f8043d5afa31cd007c5b020.png

//判断一个数是否是2的次方数

2ebdcb2770d9419d994cd8e0276ef4dd.png

//判断一个数的是否是2的次方数
//n=n&(n-1)
// 0001
//0010
//0100
//1000
int main()
{int n = 0;scanf("%d", &n);if ((n & (n - 1)) == 0){printf("YES\n");}else{printf("NO\n");}return 0;
}

练习2          二进制位 置0或者置 1 

编写代码将13⼆进制序列的第5位修改为1,然后再改回0?

4e47685dd455409c8a9fe9ce79ad90e1.png

443b91284ab4404e9bc65f924db53f9b.png

//编写代码将13⼆进制序列的第5位修改为1,然后再改回0 ?
// 0001 1101
int main()
{int n = 0;scanf("%d", &n);	// 13  0000 1101 //移到n = n | (1 << 4);  // 0000 1101 | 0001 0000==0001 1101printf("%d\n", n);//复原
//   0001 1101 变成 0000 1101
//   按位与1110 1111 即可   怎么变呢  1的二进制是  0000 0001 左移4位 0001 0000然后取反 1110 1111n = n & ~(1 << 4);printf("%d\n", n);return 0;
}

获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列

3412eade4862443d9465e5b2e53c2125.png

总结方法:

输入的数只要往右移,把每一个数移到最低位按位与上一个1就可以获得最低的是否是1了,可以明确判断出你输入的数转换成二进制形式有多少个1.

编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

6397adc8ead54802afced720dc7c2a06.png

0321b6d5f2c34d429764119352c0bcfc.png

10ccecb5a11b4499a63e440e2aa244e5.png

795c1ddb117d43e6a445672d2a2b40a2.png

语法说说支持连续赋值,建议写代码不要这么写。

354688d9e71745e5bbdfe067b7fa12fc.png

53b9e24fc0704b70881bec1a2aef4284.png

96ca1e12b07046a08772322659a89cb5.png

c81495572a44425f89589b854646bc97.png

效果一样。 

强制类型转换。 

f72b86df9f934a7ca69681a1a709cd98.png

7c77415756154d7db08374f96e4bffe0.png

afa731b646854ef0bc808101208aafdf.png

 1是40 2是4/8,3是10,4是4/8

b0257a30324948599e7c25449a0512a0.png

23cbcf305d7f47c294b43831de6b2264.png

逻辑与,左边为假右边就不计算了。

逻辑或,左边为真,右边就不计算了

 0428c84ddcc940ad896e42f1e5a87625.png

逗号表达式是从左到右计算,整个表达式的结果是最后一个表达式的结果。

237dc5030fa34438b0b3e2e51fa8cb22.png

99735537754a49b5bfb6a27c2c83e155.png

 50a22fc78f0d430bbb57a1289a77ddf9.png

b7767d114f4e469788162019df18ae4b.png

edba08ff4104420ab324d7fecd9ba2ac.png

5ac4a07cf140431387b1c46815667539.png

整型提升

b5f9e9c5d7854700a0cf2da7bd61e0a9.png

61256e0a4dc544889cc0b99ba0326d66.png

 d67e20c0c212487e8348debaf7e80abb.pngd3a790ba9ace421d840ad465a36e8a3a.png

20039b6e649a4e5aa4e4082e942ab1ee.png

一个char类型的占1个bit 相对于8个biye位,他要整型提升是因为    难以直接实现两个8比特字节直接相加运算(虽然机器指令
中可能有这种字节相加指令)
。所以,表达式中各种长度可能小于int长度的整型值,都必须先转
换为int或unsigned int,然后才能送入CPU去执行运算。

例如图中的a为5,b为126  先把a的原码写出来相加得出来后8位,首先看最高位是0或者1,是1补1,是0补0,得出来的是补码,因为整数在内存中的存储是补码形式的,然后-1取反得原码,因为打印的都是以原码形式打印的。

a与b会发生整形提升,a与b的值会发生变化。

f8be04e04df044dd9e0fd7a4f2a709a5.png

无符号的数发生整形提升,高位补0

55b1bba5aa7345cfb685333279cc59f4.png

上面的这些大小都小于int类型

下面讨论大小大于或者等于int类型的整形提升

31786e7b602545569db9c4d96149ed1a.png

这些类型都是向上转换的。

91ac16415dbf4a92aa7e140464a5898b.png

数据存储

72dadfe03e46428984b4b1771153d8f4.png

01b15cdb50ce411fa3a09a96ab239664.png

107135d8c33e4403a63af8d2d6e3fc72.png

有符号数直接用int或者 signed int类型的

无符号直接用unsigned int  类型的

05064003bebb4cef89bdb54f16a176f7.png

无符号不分最高位是正数还是负数,统一正数。

a44d106b60f84f7aab17d3d255998764.png

1e2e1ca68c0f4b50bc9e0c98fe6cea05.png

整形在内存中以补码形式存储

1fe5e35fe0a3453daf909930b2d19a7b.png

2f20eef4bf7a4b11a5a64c1d09d7492c.png

1+-1是通过补码形式实现+-的

原码取反+1得补码

补码取反+1得原码

6d4d46e90ffc4d12baeac6dad18de031.png

052ed810fa6a4c24a3da1328301249f1.png

把一个数的高位字节序内容放在低地址处,把一个低位字节序内容放在高地址处。这个叫大端存储

把一个数的高位字节序内容放在高地址处,把一个低位字节序内容放在地地址处 这个叫小端存储

7073939ef6f24af49ab6f83003497eca.png

放与拿相反。比如放进去的是44 33 22 11,拿出去的是11 22 33 44

vs里存的是小端存储模式

63fb56f41f9948669888d14190ecbe81.png

2d699b757e144248be6ce70139404768.png

667cdd5936f346ba9cb74071c9e65569.png

主要看起始地址,对起始地址解引用看是不是1还是0,并且还要强制类型转换成char*类型,int类型一次性访问4个字节。

3ad494e4b4614b30b02c76676d1c7b5c.png

c1b1c77c4d4847caa7f8529f41f02fad.png

0861437787ed4889988aed34bc681fd5.png

30011b4925794b4c822c36960c5a6edb.png

1558d53ff0f047939d03f910a96333fe.png

由于c是无符号数,整形提升的时候最高位是1,由于是无符号数,前面直接补0,所以是255,正数的原码补码,反码一样。

35cc3d7147e2418a89eef06305cee350.png

相关文章:

c语言操作符详解

操作符详解 正数的原码反码补码相同 负数的原码最高位数是1&#xff0c;正数为0 整数在内存中存储的是补码 负数的左移与右移&#xff0c;移的是补码&#xff0c;打印的是源码 补码-1取反就是原码。 左移有乘2的效果 左移和右移只针对整数。 vs里的右移操作赋采用的是算数右…...

【耐水好】强耐水UV胶水它的粘接强度和普通UV胶水比如何呢

【耐水好】强耐水UV胶水它的粘接强度和普通UV胶水比如何呢 强耐水UV胶水的粘接强度与普通UV胶水相比&#xff0c;具有显著的优势。以下是详细的比较和归纳&#xff1a; 固化方式&#xff1a; 两者都是通过紫外线&#xff08;UV&#xff09;照射进行固化&#xff0c;但强耐水UV…...

jumpserver堡垒机集群搭建

1、环境 操作系统&#xff1a;龙蜥os 7.9 firewall-cmd --permanent --zonepublic --remove-servicessh firewall-cmd --permanent --zonepublic --add-rich-rulerule familyipv4 source address10.90.101.1 port port22 protocoltcp accept firewall-cmd --reload2、安装NFS…...

Termius for Mac/Win:跨平台多协议远程管理利器

Termius for Mac/Win是一款备受瞩目的跨平台多协议远程管理软件&#xff0c;以其卓越的性能、丰富的功能和便捷的操作体验&#xff0c;赢得了广大用户的青睐。无论是在企业IT管理、系统维护&#xff0c;还是个人远程连接、文件传输等方面&#xff0c;Termius都展现出了出色的实…...

Unity OpenCVForUnity 安装和第二个案例详解 <二>

目录 一、前言 二、场景介绍 1.WebCamTextureToMatExample脚本 2.FpsMonitor脚本 三、 结构体Scaler 四、找到相机并使用 1.相机的启用 2.格式转换 a.把webCamTexture转换成Mat b.把Mat转换成Texture2D 五、脚本组合 六、作者的碎碎念 一、前言 第二个案例&#xf…...

Lua实现自定义函数面向对象编程

本文目录 1、引言2、原理3、实例4、层析验证 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在现代软件开发中&#xff0c;面向对象编程&#xff08;OOP&#xff09;已经成为一种广泛使用的编程范式…...

docker安装消息队列mq中的rabbit服务

在现代化的分布式系统中&#xff0c;消息队列&#xff08;Message Queue, MQ&#xff09;已经成为了一种不可或缺的组件。RabbitMQ作为一款高性能、开源的消息队列软件&#xff0c;因其高可用性、可扩展性和易用性而广受欢迎。本文将详细介绍如何在Docker环境中安装RabbitMQ服务…...

OpenAI新模型发布,免费开放GPT-4o!但只开放一点点...

GPT-4o 中的“o”代表“omni”——指的是 GPT-4o 的多模态。 该模型将向免费客户开放&#xff0c;这意味着任何人都可以通过 ChatGPT 访问 OpenAI 最先进的技术。 GPT-4o 是 OpenAI 昨天晚上发布的新旗舰模型&#xff0c;可以实时推理音频、视觉和文本。 据官方介绍&#xff0…...

idea的右边栏maven不见了(丢了)解决方案以及idea无法识别maven项目

前言 众所周知&#xff0c;idea是java开发中不可缺少的利器&#xff0c;但是由于功能过多&#xff0c;导致奇怪的问题也很多 问题汇总 idea的右边栏maven丢了 idea无法识别maven项目 对应的解决办法 idea的右边栏maven丢了 原因可能是被自己手动移除了 或者 项目没被正确…...

等待 chrome.storage.local.get() 完成

chrome.storage.local.get() 获取存储处理并计数&#xff0c;内部计数正常&#xff0c;外部使用始终为0&#xff0c;百思不得其解。 如何在继续执行之前等待异步chrome.storage.local.get()完成-腾讯云开发者社区-腾讯云 (tencent.com) 原来我忽略了异步问题&#xff0c;最简…...

004 AOP使用

文章目录 基于AspectJ的AOP的使用添加依赖编写目标类和目标方法使用XML实现实现步骤切入点表达式通知类型 使用注解实现实现步骤环绕通知注解配置定义通用切入点 纯注解方式 基于AspectJ的AOP的使用 其实就是指的SpringAspectJ整合&#xff0c;不过Spring已经将AspectJ收录到自…...

Zookeeper 集群广播事务性能如何保证?

Zookeeper 集群广播事务性能如何保证? zookeeper是如何保证广播事务时,从开始到多数节点确认事务这个高效的? 在 Zookeeper 中,确保广播事务从开始到多数节点确认的高效性至关重要。Zookeeper 通过以下几个关键机制 和优化策略来实现这一目标: ZAB 协议(Zookeeper Atom…...

【vue解决el-input组件自动填充用户名密码】

解决el-input组件自动填充用户名密码 发现用autocomplete"off"并不能解决el-input组件自动填充密码的问题。 解决方法 auto-complete"new-password" 在el-input组件添加auto-complete"new-password" 即可...

案例练习:演讲比赛

演讲比赛: 比赛规则&#xff1a; 某市举行一场演讲比赛&#xff08; speech_contest &#xff09;&#xff0c;共有 24 个人参加。比赛共三轮&#xff0c;前两轮为淘汰赛&#xff0c;第三轮为决赛。 比赛方式&#xff1a;分组比赛&#xff0c;每组 6 个人&#xff1b;选手每次…...

推荐一个很好用的Latex写代码的软件

软件名称&#xff1a;Axmath 据说是国产软件&#xff0c;好用是真好用&#xff08;去哪找&#xff1f;比如某地球号的公主号或其他地方&#xff09;我是推荐付费购买使用 1.通过图形操作&#xff0c;选择要转成Latex代码的符号&#xff0c;按下转换&#xff0c;直接就出现了我…...

windows 程序右键管理员点击无响应

Windows 程序在右键单击以管理员身份运行时没有响应&#xff0c;可能是由于多种原因引起的。下面是一些常见的问题和解决方案&#xff1a; 1. 用户账户控制 (UAC) 设置问题&#xff1a; - 试着降低或提高 UAC 设置&#xff0c;然后再试一次。可以在控制面板的“用户账户”部…...

开发基于Java语言的SaaS(Software-as-a-Service,软件即服务)模式的HIS系统详解 HIS系统源码 支持二开

开发基于Java语言的SaaS&#xff08;Software-as-a-Service&#xff0c;软件即服务&#xff09;模式的HIS系统详解 HIS系统源码 支持二开 开发基于Java语言的SaaS&#xff08;Software-as-a-Service&#xff0c;软件即服务&#xff09;模式的HIS&#xff08;Hospital Informat…...

关于微信小程序(必看)

前言 为规范开发者的用户个人信息处理行为&#xff0c;保障用户的合法权益&#xff0c;自2023年9月15日起&#xff0c;对于涉及处理用户个人信息的小程序开发者&#xff0c;微信要求&#xff0c;仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则…...

Activity中Context

Activity中Context在activity.attach()设置&#xff0c;所以Application中Context为ContextImpl appContext createBaseContextForActivity(r);&#xff0c;即在ContextImpl.createActivityContext()设置DispalyId private ContextImpl createBaseContextForActivity(Activit…...

位图法-有效的数独

有效的数独&#xff0c;主要是判断每行每列每宫有无重复元素。 每行每列用二重循环&#xff0c;每宫比较复杂&#xff0c;需要考虑每一宫的坐标与二重循环ij对应关系 行i&#xff0c;每一宫3行&#xff0c;3列 x3*(i/3)j/3 y3*(i%3)j%3...

Zookeeper ZNode 数据结构原理

ZNode 学习指南 1. ZNode 基本概念 什么是 ZNode:ZNode 是 Zookeeper 中的数据节点。它类似于文件系统中的文件和目录,ZNode 既可以保存数据又可以作为其他 ZNode 的父节点。ZNode 的路径:每个 ZNode 在 Zookeeper 命名空间中都有一个唯一的路径,如 /app1/config。2. ZNod…...

Golang - 90天从新手到大师

开篇 最近有很多小伙伴都在寻找go语言完整学习资料&#xff0c;我整理了一些Golang方面的知识&#xff0c;方便大家学习。内容从最基础的入门到项目设计&#xff0c;希望帮助更多想了解和学习Go语言的伙伴。 因为是持续创作&#xff0c;所以也会持续更新。有些章节目录还没有…...

MyBatis常用转义字符 大于、小于、大于等于、小于等

在Mybatis编写特殊常用字符你会发现会报错,比如常用的<,>,<,> 等&#xff0c;原因是与xml文件的元素<>冲突&#xff0c;所以需要转义。整理转义字符如下&#xff1a; 符号原始字符转义字符大于>>大于等于>>小于<<小于等于<<和&…...

Python --- 如何修改Jupyter Notebook在本地保存文件的默认路径?

如何修改Jupyter Notebook在本地保存文件的默认路径&#xff1f; 一直以来都比较喜欢jupter notebook&#xff0c;自从用了以后就爱上了。平时用的时候&#xff0c;因为大多都是临时调用&#xff0c;每次在界面里直接new一个新的file就开干。 曾经也想过我创建的这些python文件…...

大模型 舆情分析 数据构造 prompt提示词 经验分享 数据准备

最近在做舆情分析&#xff0c;需要执行比较复杂的任务流程&#xff08;例如同时执行人名识别、相关机构识别、90分类&#xff09;&#xff0c;传统Bert无法胜任&#xff0c;因此尝试使用大模型进行处理。 下面的一些提示词是我用来准备数据的&#xff0c;这些数据可以按照不同…...

这些已经死去的软件,依旧无可替代

互联网这条长河里&#xff0c;软件们就像流星一样&#xff0c;一闪而过。有的软件火过一段时间&#xff0c;然后就慢慢消失了。 说不定有些软件你以前天天用&#xff0c;但不知道从什么时候开始就不再用了。时间一天天过去&#xff0c;我们的热情、记忆都在消退&#xff0c;还…...

SYD88xx使代码在RAM内存中执行/运行

SYD88xx使代码在RAM中执行 SYD8811/8810默认都是cache模式的&#xff0c;但是在代码首次运行的时候&#xff0c;需要将代码从flash搬到cache中执行&#xff0c;这样第一次的代码执行可能会比较慢&#xff0c;这里提供一个将需要提速的代码放到RAM中执行的方法。 对于SYD8811…...

基于支持向量机的垃圾邮件分类,使用SVM+flask+vue

sms-classify 基于支持向量机的垃圾邮件分类&#xff0c;使用SVMflaskvue 数据集和源码地址 数据集 SMS Spam Collection Data Set 来源于 UCI。样例被分为非垃圾邮件&#xff08;86.6%&#xff09;和垃圾邮件&#xff08;13.4%&#xff09;&#xff0c;数据格式如下&#xff…...

目标检测数据集 - 零售食品LOGO检测数据集下载「包含VOC、COCO、YOLO三种格式」

数据集介绍&#xff1a;零售食品 LOGO 检测数据集&#xff0c;真实零售食品 LOGO 高质量商品图片数据&#xff0c;数据集含常见零售食品 LOGO 图片&#xff0c;包括饮料类、酒类、调味品类、膨化饼干类、巧克力类、常见零食类等等。数据集类别丰富&#xff0c;标注标签包含 150…...

47.PyCharm P版突然无法启动

目录 1.启动cmd.exe&#xff0c;进到pycharm\bin目录&#xff0c;启动.\pycharm.bat&#xff0c;如果正常&#xff0c;就像下面这个样子&#xff0c;如果不正常&#xff0c;则会报错&#xff0c; 2.用记事本打开pycharm.bat文件&#xff0c;加上以下代码后 今晨&#xff0c;无…...

做网站 框架/产品推广方式有哪些

Hello, I’m Shendi 最近需要使用到搜索框&#xff0c;搜索框输入内容后出现提示内容&#xff0c;于是选用了 weui 的搜索框 对于 DOM 的操作&#xff0c;我使用的 vue&#xff0c;没有用到 vue 的也可以自己使用js手动循环生成 DOM效果 引入库 <!-- weui --> <lin…...

2018年网站开发/广州网站优化公司如何

数据库和client在不同的机器之上。 在安装之前&#xff0c;在安装Oracle数据库的server上导航到以下的文件夹。 将listener.ora和tnsnames.ora中的host中的localhost都改为机器的IP地址&#xff0c;我的为192.168.1.102 而后開始安装Oracleclient 选择定制&#xff0c;能够自定…...

鸡泽网站建设案例/网站流量统计系统

对于Oracle数据库操作主要使用的是命令行方式&#xff0c;而所有的命令都使用sqlplus完成&#xff0c;对于sqlplus有两种形式。 一种是dos风格的sqlplus&#xff1a;sqlplus.exe;另一种是windows风格的sqlplus&#xff1a;sqlplusw.exe;在Oracle 10g之中主要使用的是sqlplusw命…...

做网站哪家好 青岛/网页版登录入口

1.安装Docker PS&#xff1a;先打开网络 yum [Errno 256] No more mirrors to try 解决方法 输入下面的命令即可解决问题&#xff1a; yum clean all yum makecache &#xff08;1&#xff09;安装docker sudo yum install docker PS: 遇报错 Another app is currentlty holdin…...

商务型网站怎么运作/微信引流推广精准粉

最近准备开始开这门公开课&#xff0c;科技企业和商业之间的课程~ 虽然感觉这种课&#xff0c;其实更重要的是课堂上的头脑风暴哈哈~ 一、课程介绍 课程名字&#xff1a;“The Creation and Growth of Technological Enterprises” (Fall 2021) 慕课网址&#xff1a;https://…...

whois skxy wordpress/磁力

线性模型回顾 我们回顾一下之前的三种线性模型&#xff0c;它们的共同点是都要对输入的数据x做一个加权的分数s。 下图表示了这三种不同的线性模型的表示方式、误差函数和求解最小的Ein的方法。 这里可以看出&#xff0c;PLA算法这种线性分类模型&#xff0c;在求解Ein的时候是…...