c语言操作符详解
操作符详解
正数的原码反码补码相同
负数的原码最高位数是1,正数为0
整数在内存中存储的是补码
负数的左移与右移,移的是补码,打印的是源码
补码-1取反就是原码。
左移有乘2的效果
左移和右移只针对整数。
vs里的右移操作赋采用的是算数右移,右边丢弃、左边补原符号位
符号位是根据正数还是负数来确定的,正数补0,负数补1.
总结:
计算的是以补码形式计算,打印的是以原码形式存在。
计算的时候要用补码,因为整数在内存中存储的是补码。
按位与二个同时为1就得1,有一个不得1就为0.
取反的时候不要动符号位。
异或是相同为0,相异为1
0异或a是a a异或a是0
异或支持交换律
统计二进制中有多少个1
任何一个数a按位与1如果==1就说明a的二进制最低位是1
a&1==0 说明a的二进制最低位是0
就比如这段二进制代码 a&1 第1位是0 就&1 得0 就跳过最低位,看第二位,如果第二位&1等于1就让COUNT++,一直循环下去。这样就可以知道这段二进制代码有多少个1了。
方法1 利用&和>>操作符计算出二进制代码有多少个1.
#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;
}
总结
把一个二进制向右移动i个位移到最低位和1进行按位与进行比,如果==1就说明二进制有1
从右往左看,每次移到的位位数再增加,最高是32位
方法2:利用/2 %2的方法来
、
想得到二进制的每一位 /2 %2来解决这个问题
//考虑正负数问题
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
//判断一个数是否是2的次方数
//判断一个数的是否是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?
//编写代码将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;
}
获取一个整数二进制序列中所有的偶数位和奇数位,分别打印出二进制序列
总结方法:
输入的数只要往右移,把每一个数移到最低位按位与上一个1就可以获得最低的是否是1了,可以明确判断出你输入的数转换成二进制形式有多少个1.
编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
语法说说支持连续赋值,建议写代码不要这么写。
效果一样。
强制类型转换。
1是40 2是4/8,3是10,4是4/8
逻辑与,左边为假右边就不计算了。
逻辑或,左边为真,右边就不计算了
逗号表达式是从左到右计算,整个表达式的结果是最后一个表达式的结果。
整型提升
一个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的值会发生变化。
无符号的数发生整形提升,高位补0
上面的这些大小都小于int类型
下面讨论大小大于或者等于int类型的整形提升
这些类型都是向上转换的。
数据存储
有符号数直接用int或者 signed int类型的
无符号直接用unsigned int 类型的
无符号不分最高位是正数还是负数,统一正数。
整形在内存中以补码形式存储
1+-1是通过补码形式实现+-的
原码取反+1得补码
补码取反+1得原码
把一个数的高位字节序内容放在低地址处,把一个低位字节序内容放在高地址处。这个叫大端存储
把一个数的高位字节序内容放在高地址处,把一个低位字节序内容放在地地址处 这个叫小端存储
放与拿相反。比如放进去的是44 33 22 11,拿出去的是11 22 33 44
vs里存的是小端存储模式
主要看起始地址,对起始地址解引用看是不是1还是0,并且还要强制类型转换成char*类型,int类型一次性访问4个字节。
由于c是无符号数,整形提升的时候最高位是1,由于是无符号数,前面直接补0,所以是255,正数的原码补码,反码一样。
相关文章:

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

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

jumpserver堡垒机集群搭建
1、环境 操作系统:龙蜥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是一款备受瞩目的跨平台多协议远程管理软件,以其卓越的性能、丰富的功能和便捷的操作体验,赢得了广大用户的青睐。无论是在企业IT管理、系统维护,还是个人远程连接、文件传输等方面,Termius都展现出了出色的实…...

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

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

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

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

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

等待 chrome.storage.local.get() 完成
chrome.storage.local.get() 获取存储处理并计数,内部计数正常,外部使用始终为0,百思不得其解。 如何在继续执行之前等待异步chrome.storage.local.get()完成-腾讯云开发者社区-腾讯云 (tencent.com) 原来我忽略了异步问题,最简…...
004 AOP使用
文章目录 基于AspectJ的AOP的使用添加依赖编写目标类和目标方法使用XML实现实现步骤切入点表达式通知类型 使用注解实现实现步骤环绕通知注解配置定义通用切入点 纯注解方式 基于AspectJ的AOP的使用 其实就是指的SpringAspectJ整合,不过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" 即可...
案例练习:演讲比赛
演讲比赛: 比赛规则: 某市举行一场演讲比赛( speech_contest ),共有 24 个人参加。比赛共三轮,前两轮为淘汰赛,第三轮为决赛。 比赛方式:分组比赛,每组 6 个人;选手每次…...

推荐一个很好用的Latex写代码的软件
软件名称:Axmath 据说是国产软件,好用是真好用(去哪找?比如某地球号的公主号或其他地方)我是推荐付费购买使用 1.通过图形操作,选择要转成Latex代码的符号,按下转换,直接就出现了我…...
windows 程序右键管理员点击无响应
Windows 程序在右键单击以管理员身份运行时没有响应,可能是由于多种原因引起的。下面是一些常见的问题和解决方案: 1. 用户账户控制 (UAC) 设置问题: - 试着降低或提高 UAC 设置,然后再试一次。可以在控制面板的“用户账户”部…...

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

关于微信小程序(必看)
前言 为规范开发者的用户个人信息处理行为,保障用户的合法权益,自2023年9月15日起,对于涉及处理用户个人信息的小程序开发者,微信要求,仅当开发者主动向平台同步用户已阅读并同意了小程序的隐私保护指引等信息处理规则…...
Activity中Context
Activity中Context在activity.attach()设置,所以Application中Context为ContextImpl appContext createBaseContextForActivity(r);,即在ContextImpl.createActivityContext()设置DispalyId private ContextImpl createBaseContextForActivity(Activit…...

位图法-有效的数独
有效的数独,主要是判断每行每列每宫有无重复元素。 每行每列用二重循环,每宫比较复杂,需要考虑每一宫的坐标与二重循环ij对应关系 行i,每一宫3行,3列 x3*(i/3)j/3 y3*(i%3)j%3...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Day131 | 灵神 | 回溯算法 | 子集型 子集
Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣(LeetCode) 思路: 笔者写过很多次这道题了,不想写题解了,大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
Redis:现代应用开发的高效内存数据存储利器
一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...