C基础-操作符详解

操作符分类:

算数操作符:+ - * / %

//算数操作符
// int main()
// {
//     //   /除法 1.整数除法(除号两端都是整数)  2浮点数除法,除号的两端只要有一个小数就执行小数除法
//     // 除法中,除数为0
//     int a = 7 / 2;
//     printf("%d\n",a); //3
//     double b = 7 / 2;
//     printf("%lf\n",b); //3.000000
//     double c = 7 / 2.0;
//     printf("%lf\n",c); //3.500000
//     int d = 0;
//     int e = 5 / d; //除数不可为0,编译器会报错//     printf("%d\n",e);//     return 0;
// }int main()
{int a = 17 % 8; //% 得到数整数的余数//int b = 17.0 % 8.0; // %取模操作符的两个操作数必须都是整数才行printf("%d\n",a);return 0;
}

移位操作符:<< >>

//移位操作符
//  <<左移操作符
//  >>右移操作符
//注意:以为操作符的操作数只能是整数  移动的是二进制
int main()
{//int a = 15;//00000000000000000000000000001111 -原码   //00000000000000000000000000001111 -反码 //00000000000000000000000000001111 -补码//int c = -15; //10000000000000000000000000001111 -原码 //11111111111111111111111111110000 -反码(原码的符号位不变,其他位按位取反) 11111111111111111111111111110001 -补码(反码+1就是补码)//int b = a >> 1;//移动的就是a中的二进制信息 //0000000000000000000000000000111 -  7//右移:算术右移(右边丢弃,左边直接补原来的符号位)  逻辑右移(右边丢弃,左边直接补0)// C语言没有明确规定是算术右移还是逻辑右移//int c = a << 1;//00000000000000000000000000011110//整数的二进制表示形式 : 原码 反码 补码 //正整数的原码、反码、补码是相同的//负的整数原码、反码、补码是要计算的//首先不管是正整数还是负整数都可以写出二进制原码  1.根据正负直接写出的二进制序列就是原码//1个整型是4个字节 = 32bit位//整数在内存中存储的是补码//计算的时候也是使用补码计算的// printf("%d\n",b); //7// printf("%d\n",c); //30// int d = -15; //10000000000000000000000000001111// int e = d >> 1;//11111111111111111111111111110001  ->  11111111111111111111111111111000 -> 11111111111111111111111111110111   ->00000000000000000000000000001000// printf("%d\n",e);//!移位操作符不要移负数哦int a = 6;// 110int b = a << 1;//1100printf("%d\n",b); //12return 0;
}

位操作符:& | ^

//位操作符
//也是操作二进制位
// &
// int main()
// {
//     int a = 3; //00000000000000000000000000000011
//     int b = -5;//10000000000000000000000000000101  11111111111111111111111111111010 补码11111111111111111111111111111011
//     int c = a & b;
//     // & --  对应二进制位,有0则为0,两个同时为1才是1
//     //00000000000000000000000000000011
//     //11111111111111111111111111111011
//     //00000000000000000000000000000011  -补码//     printf("%d\n",c); //3//     return 0;
// }//|
// int main()
// {
//     int a = 3; //00000000000000000000000000000011
//     int b = -5;//10000000000000000000000000000101  11111111111111111111111111111010 补码11111111111111111111111111111011
//     int c = a | b;
//     // | --  对应二进制位,有1则为1,两个同时为0才是0
//     //00000000000000000000000000000011
//     //11111111111111111111111111111011
//     //11111111111111111111111111111011  -补码
//     //11111111111111111111111111111010
//     //10000000000000000000000000000101 -5
//     printf("%d\n",c); //-5//     return 0;
// }//^
int main()
{int a = 3; //00000000000000000000000000000011int b = -5;//10000000000000000000000000000101  11111111111111111111111111111010 补码11111111111111111111111111111011int c = a ^ b;// ^ --  对应二进制位,相同为0,相异为1//00000000000000000000000000000011//11111111111111111111111111111011//11111111111111111111111111111000  -补码//11111111111111111111111111110111//10000000000000000000000000001000printf("%d\n",c); //-8return 0;
}//不能创建临时变量,实现两个整数的交换
int main()
{int a = 3;int b = 5;printf("交换前: a=%d b=%d\n",a,b);// int tmp = a;// a = b;// b = tmp;// a = a + b;// b = a - b;// a = a - b;   超过整形最大存储则不行//a ^ a -> 0//a ^ 0 = a// 异或是支持交换律的//a ^ b ^ a = 5//a ^ a ^ b = 5a = a ^ b;b = a ^ b; // b = a ^ b ^ b = aa = a ^ b;// a = a ^ b ^ a = bprintf("交换后: a=%d b=%d\n",a,b);return 0;
}

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

//编写代码实现:求一个整数存储在内存中的二进制中1的个数
//方法1
// int main()
// {
//     //整数有32个bit位
//     //获得32个bit位的每一位,
//     //判断这一位是否为1
//     //是1就是记数器+1
//     int num = 10;
//     int count = 0;//     while (num)
//     {
//         if (num%2 == 1)
//         {
//             count++;
//         }
//         num = num/2;//     }
//     printf("二进制中1的个数 = %d\n",count);//     return 0;
// }//方法2
int main()
{int num = 10;int i = 0;int count = 0;for(i=0;i<32;i++){if (num & (1 << i)){count++;}}printf("二进制中1的个数 = %d\n",count);return 0;
}

赋值操作符: = +=  -=  *= /= ....

单目操作符: ! sizeof + -  ~ & *

关系操作符: > < >= <= == !=

逻辑操作符:&&  ||

条件操作符:? :

逗号表达式 :    ,

下标引用,函数调用和结构成员:  []. ().  .  ->  

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

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

相关文章

Spring中使用了哪些设计模式

1、工厂模式 在各种BeanFactory以及ApplicationContext创建中都用到了。 2、模板模式 在各种BeanFactory以及ApplicationContext实现中也都用到了。 3、代理模式 Spring AOP 利用了AspectJ AOP实现的&#xff0c;AspectJ AOP底层使用了动态代理。 4、策略模式 加载资源文…

Java基础入门·多线程·线程池ThreadPool篇

前言 特点分析 线程池ThreadPool 销毁线程池 Executor类 ​​​​​​​ ​​​​​​​ ​​​​​​​ Callable接口 线程池使用 ​​​​​​​…

Android EditText setTranslationY导致输入法覆盖问题

平台 RK3288 Android 8.1 显示: 1920x1080 160 dpi 概述 碰到一个问题&#xff1a; 弹出的输入法会覆盖文本输入框。 原因&#xff1a;输入框使用了setTranslationY() 位置偏移后&#xff0c; 输入法无法正确获取焦点的位置。 分析 先上图: 初始布局 调用etTranslation…

抖音小程序开发教学系列(5)- 抖音小程序数据交互

第五章&#xff1a;抖音小程序数据交互 5.1 抖音小程序的网络请求5.1.1 抖音小程序的网络请求方式和API介绍5.1.2 抖音小程序的数据请求示例和错误处理方法 5.2 抖音小程序的数据缓存和本地存储5.2.1 抖音小程序的数据缓存机制和使用方法5.2.2 抖音小程序的本地存储和数据持久化…

使用工厂模式、策略模式、门面模式、单例模式、责任链模式、装饰者模式和访问者模式来实现红包雨

红包雨是一种在移动应用程序中经常出现的营销活动,它可以在特定时间内向用户投放很多红包,来吸引用户参与活动。如何在程序中实现红包雨呢?下面将介绍如何使用设计模式来实现红包雨。 首先,使用工厂模式来创建不同类型的红包对象。在工厂模式中,我们定义一个工厂类,该类…

unity 接收拼接数据进行纹理替换且保存相机纹理到rtsp server(一)

1 rtsp 协议后编码解码 rtsp协议的问题就是&#xff0c;拼接完成后&#xff0c;还需要编码&#xff0c;而unity里面再需要解码&#xff0c;需要的过程多了一步编码再解码&#xff0c;大大加重了 2 rtsp 协议后轻量编码 rtsp协议使用mjpeg进行图片传输。why&#xff1f;这样做…

MFC:程序的托盘显示

介绍 关键技术&#xff0c;API函数Shell_NotifyIcon&#xff0c;具体查看msdn吧 实现的主要代码 #define MY_TRAY_ICON_ID (1)/ //其他代码&#xff1a;略BEGIN_MESSAGE_MAP(CTestShowTrayDlg, CDialogEx)//...ON_MESSAGE(WM_MY_TRAY_ICON, &CTestShowTrayDlg::OnMessag…

vite + react + typescript + uni-app + node 开发一个生态系统

简介 使用 vite react typescript uni-app node 来开发一个简易的生态系统案例&#xff0c;包含 APP&#xff0c;H5&#xff0c;微信小程序&#xff0c;控制台&#xff0c;服务端 开发 admin 技术栈&#xff1a;vite react typescript初始化控制台项目选择自定义预设…

基于开源模型搭建实时人脸识别系统(五):人脸跟踪

继续填坑&#xff0c;之前已经讲了人脸检测&#xff0c;人脸识别实战之基于开源模型搭建实时人脸识别系统&#xff08;二&#xff09;&#xff1a;人脸检测概览与模型选型_开源人脸识别模型_CodingInCV的博客-CSDN博客&#xff0c;人脸检测是定位出画面中人脸的位置&#xff0c…

【C语言】指针的“最后一站”【进阶版】

欢迎各位看官^_^ 目录 1、字符指针 2、指针数组 3、数组指针 3.1数组指针的定义 3.2数组指针的使用 4、数组指针和指针数组的区别 5、数组参数&#xff0c;指针参数 5.1数组参数定义 5.2指针参数定义 5.3一维数组传参 5.4二维数组传参 5.5一级指针传参 5.6二级指…

《Docker 容器化的艺术:深入理解容器技术》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

javaweb04-vue基础

话不多说&#xff0c;参考官网地址Vue官网集成Vue应用。 一、Vue快速入门 &#xff08;1&#xff09;新建HTML页面&#xff0c;引入Vue.js 我这里用的是CDN方式 <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> &#xff08;2&am…

windows10系统下Python3.11中安装Numpy库教程

Python3.11中安装Numpy库目录 项目场景&#xff1a;问题描述解决方案&#xff1a;①下载Numpy文件②把NumPy文件放到Python安装的Scripts文件夹里。③安装numpy④安装验证 项目场景&#xff1a; numpy是开源的数值计算扩展&#xff0c;用于数据分析、机器学习、科学计算的重要…

敲代码常用快捷键

1、代码拖动 PyCharm&#xff1a;按住 shiftalt鼠标选中某一区域来拖动&#xff0c;即可实现拖动这一区域至指定区域。Visual Studio Code (VSCode): - Windows/Linux&#xff1a;Alt 鼠标左键拖动 - MacOS&#xff1a;Option 鼠标左键拖动 IntelliJ IDEA: - Win…

【Java 基础篇】Java TreeSet 详解:红黑树实现的有序集合

Java 集合框架提供了多种数据结构&#xff0c;用于存储和操作数据。其中&#xff0c;TreeSet 是一种特殊类型的集合&#xff0c;它通过红黑树&#xff08;Red-Black Tree&#xff09;数据结构实现了有序的、唯一元素存储。本篇博客将深入探讨 TreeSet&#xff0c;包括其概念、特…

小程序中使用分包

前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能&#xff0c;使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M&#xff0c;分包有两种情况&#xff1a;普通分包和独立分包&#xff0c;下面介绍的是普通分包。官方文档…

《向量数据库指南》——哪些需求推动了如Milvus Cloud等的向量数据库的更新和迭代?

这个问题需要深入讨论大模型与向量数据库之间的关系。从去年 ChatGPT 推出时这个问题就开始引发我们的思考。在当时,我们敏锐地意识到这将是一个机遇。然而,在国内,这个概念的认知需要更长的时间。我个人在去年四五月份的美国之行中注意到,数据库在美国已经是一个非常热门的…

leetcode分类刷题:队列(Queue)(二、优先队列解决TopK简单问题)

1、优先队列好像一般都叫堆&#xff0c;以大顶堆为例&#xff0c;顶部第一个元素最大&#xff0c;底部最后一个元素最小&#xff0c;自顶向底是递减的&#xff08;更准确的说是非递增的&#xff09;&#xff0c;对外只能访问顶部第一个元素&#xff08;对应索引为0&#xff09;…

算法通关村第十九关:青铜-动态规划是怎么回事

青铜挑战-动态规划是怎么回事 动态规划&#xff08;简称DP&#xff0c;Dynamic Programming&#xff09;&#xff1a;最热门、最重要的算法之一。面试中大量出现&#xff0c;整体偏难。 1. 热身&#xff1a;重复计算和记忆化搜索&#xff08;如何说一万次"我爱你"&…

【LeetCode-中等题】59. 螺旋矩阵 II

文章目录 题目方法一&#xff1a;二维数组缩圈填数字方法二&#xff1a; 题目 方法一&#xff1a;二维数组缩圈填数字 定义四个边界条件&#xff0c;每转一圈&#xff0c;把数值填进去&#xff0c;然后缩小一圈&#xff0c;直到不满足条件位置 结束循环条件可以是&#xff1a; …