企业网站建设有几种形式/全网整合营销公司
文章目录
- 操作符详解
- 1. 操作符的分类
- 2. 二进制和进制转换
- 2.1 什么是二进制、八进制、十进制、十六进制
- 2.1.1 二进制和进制转换
- 2.1.2 二进制转十进制
- 2.2.3 二进制转八进制
- 2.2.4 二进制转十六进制
- 3. 源码、反码、补码
- 4. 移位操作符
- 4.1 左移操作符
- 4.2 右移操作符
- 5. 位操作符:&、|、^、~
- 5.1 按位与 &
- 5.2 按位或 |
- 5.3 按位异或 ^
- 5.5 按位取反 ~
操作符详解
1. 操作符的分类
C语言中,操作符分为算术操作符
、赋值操作符
、逻辑操作符
、条件操作符
和单目操作符
等等。
. 算术操作符:+ 、- 、* 、 %
. 移位操作符: << >>
. 位操作符: &、|、^
. 赋值操作符: = 、+= 、 -= 、 = 、 /= 、%= 、<<= 、>>= 、&= 、|= 、^=
. 单目操作符: ! 、++、–、&、、+、-、~ 、sizeof(类型)
. 关系操作符: > 、>= 、< 、<= 、 == 、 !=
. 逻辑操作符: && 、||
. 条件操作符: ? :
. 逗号表达式: ,
. 下标引用: []
. 函数调用: ()
2. 二进制和进制转换
2.1 什么是二进制、八进制、十进制、十六进制
2.1.1 二进制和进制转换
通俗来讲二进制、八 进制、 十进制、 十六进制是数值的不同表示形式而已。
比如:数值15的各种进制的表示形式:
15的2进制表现形式: 1111
15的8进制表现形式: 17
15的10进制表现形式: 15
15的16进制表现形式: F
//16进制的数值之前写:0x
//8进制的数值之前写:0
#include<stdio.h>
int main()
{printf("%d\n", 153);printf("%d\n", 0153);printf("%d\n", 0x153);return 0;
}
2.1.2 二进制转十进制
十进制的123表示的值是一百二十三 ,十进制的每一位是有权重的 ,十进制的数字从右向左是个位、十位、百位… ,分别每一位的权重是 100 , 101 , 102 …
二进制和十进制是类似的 ,只不过二进制的每—位的权重
十进制转二进制数字
进行转化的方法就是:这个数字%2,得到的余数写在一边,直到最后被除数为0时,再将数字从下往上抄上,这个数字即为十进制数字的二进制数
所以120转成二进制就是1111000
2.2.3 二进制转八进制
8进制的数字每一位是0 ~ 7的,0~7的数字,各自写成2进制,最多有3个二进制位就足够了,比如7的二进制是111 ,所以在二进制转八进制数的时候 ,从二进制序列中右边低位开始向左每3个二进制位会换算一 个八进制位 ,剩余不够3个二进制位的直接换算。
如:二进制的 01101011,换成八进制:0153,0开头的数字,会被当做八进制。
2.2.4 二进制转十六进制
十六进制的数字每一位是0 ~ 9,a ~ f 的,0~9,a ~ f的数字,各自写成二进制,最多有4个二进制位就足够了,比如 f 的二进制是1111,所以在二进制转十六进制数的时候,从二进制序列中右边低位开始向左每4个二进制位会换算一个十六进制位,剩余不够4个二进制位的直接换算。
如:二进制的01101011,换成十六进制:0x6b ,十六进制表示的时候前面加0x
3. 源码、反码、补码
整数的二进制表示方法有三种 ,即原码、反码和补码
有符号整数的三种表示方法均有符号位和数值位两部分,二进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。
符号位都是用0表示“正” ,用1表示“负”。
负整数的原码、反码、补码表示方法各不相同。
原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
注意:正数的原码、反码、补码相同。
补码得到原码也是可以使用:取反,+1的操作。
对于整形来说:数据存放内存中其实存放的是补码。
计算机中进行计算是使用补码,%d打印是用原码。
这是因为在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一 处理; 同时,加法和减法也可以统一处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
#include<stdio.h>
int main()
{int a = 10;// a是整型,即a占4个字节(32bite)位// 00000000000000000000000000001010 -> a的原码// 00000000000000000000000000001010 -> a的反码// 00000000000000000000000000001010 -> a的补码int b = -10;// 10000000000000000000000000001010 -> b的原码// 11111111111111111111111111110101 -> b的反码// 11111111111111111111111111110110 -> b的补码return 0;
}
4. 移位操作符
左移操作符:<<
右移操作符:>>
注:移位操作符的操作数只能是整数。
4.1 左移操作符
移位规则:左边抛弃、右边补0
#include<stdio.h>
int main()
{int a = 10;int b = a << 1;printf("b = %d\n", b);printf("a = %d\n", a);return 0;
}
可以看到左移一位有乘以2的效果。
4.2 右移操作符
移位规则:首先右移运算分两种:
- 逻辑右移:左边用0填充,右边丢弃
- 算术右移:左边用原该值的符号位填充,右边丢弃
逻辑右移比较简单粗暴,直接在左边添0,显然,这会使得负数右移后变成正数。
算数右移与逻辑右移不同,它是在左边补原该值的符号位进行填充,不会出现负数右移变正数的情况。
#include<stdio.h>
int main()
{int a = -1;int b = a >> 1;printf("b = %d\n", b);printf("a = %d\n", a);return 0;
}
注意:右移是算数右移还是逻辑右移标准中没有规定,这是取决于编译器的。
5. 位操作符:&、|、^、~
位操作符有:
& //按位与
| //按位或
^ //按位异或
~ //按位取反
这里的位表示二进制位。
注:他们的操作数必须是整数。
5.1 按位与 &
在 C 语言中,按位与运算符用符号 & 表示。
按位与的规则是:两个操作数对应的的二进制位中都为1时,结果为1,否则为0。
这里我们直接上代码
#include<stdio.h>
int main()
{int a = 10;int b = -7;int c = a & b;printf("%d\n", c);return 0;
}
5.2 按位或 |
在 C 语言中,按位或运算符用符号 | 表示。
按位或的规则是:两个操作数对应的的二进制位中任何一个对应的位为1,那么结果中的该位就为 1;只有当两个操作数的对应位都为 0 时,结果中的该位才为 0。
#include<stdio.h>
int main()
{int a = 10;int b = -7;int c = a | b;printf("%d\n", c);return 0;
}
5.3 按位异或 ^
在 C 语言中,按位异或运算符使用符号 ^ 表示。
按位异或的规则是:两个操作数中的对应位相同(都为 0 或都为 1),则结果中的该位为 0;如果两个操作数中的对应位不同(一个为 0,一个为 1),则结果中的该位为 1。
#include<stdio.h>
int main()
{int a = 10;int b = -7;int c = a ^ b;printf("%d\n", c);return 0;
}
5.5 按位取反 ~
在 C 语言中,按位取反运算符使用符号 ~ 表示。
按位取反规则是:当对一个操作数进行按位取反运算时,其二进制表示中的每个位都会被反转(0 变成 1,1 变成 0)。
#include<stdio.h>
int main()
{int a = 10;int b = ~a;printf("%d\n", b);return 0;
}
相关文章:

【C语言基础】:操作符详解(一)
文章目录 操作符详解1. 操作符的分类2. 二进制和进制转换2.1 什么是二进制、八进制、十进制、十六进制2.1.1 二进制和进制转换2.1.2 二进制转十进制2.2.3 二进制转八进制2.2.4 二进制转十六进制 3. 源码、反码、补码4. 移位操作符4.1 左移操作符4.2 右移操作符 5. 位操作符&…...

通俗易懂分析:Vite和Webpack的区别
1、对项目构建的理解 先从浏览器出发, 浏览器是由浏览器内核和JS引擎组成;浏览器内核编译解析html代码和css代码,js引擎编译解析JavaScript代码;所以从本质上,浏览器只能识别运行JavaScript、CSS、HTML代码。 而我们在…...

OpenCart程序结构与业务逻辑
一、程序业务逻辑说明 在 OpenCart 中,index.php 文件是整个应用程序的入口文件,它负责初始化应用程序并调度请求。以下是 index.php 文件加载执行的流程: 1. **设置路径常量:** - index.php 首先定义了一些重要的路径常量&…...

软件License授权原理
软件License授权原理 你知道License是如何防止别人破解的吗?本文将介绍License的生成原理,理解了License的授权原理你不但可以防止别人破解你的License,你甚至可以研究别人的License找到它们的漏洞。喜欢本文的朋友建议收藏+关注,方便以后复习查阅。 什么是License? 在…...

C/C++实现老鼠走迷宫
老鼠形象可以辨认,可以用上下左右操纵老鼠;正确检测结果,若老鼠在规定的时间内走到粮仓,提示成功,否则提示失败。代码分为3个文件:main.cpp、play.h、play.cpp。 main.cpp: #include <iostream> #include <…...

[Linux]文件基础-如何管理文件
回顾C语言之 - 文件如何被写入 fopen fwrite fread fclose fseek … 这一系列函数都是C语言中对文件进行的操作: int main() {FILE* fpfopen("text","w");char str[20]"write into text";fputs(str,fp);fclose(fp);return 0; }而上…...

bat 查找文件所在
脚本 在批处理文件(.bat)中查找文件所在的目录,你可以使用dir命令结合循环和条件语句来实现。以下是一个简单的示例,演示如何在批处理文件中查找指定文件并输出其所在目录: echo off setlocal enabledelayedexpansio…...

程序员的守护神:为何电脑永不熄灭?
在这个信息时代,程序员成了推动社会进步的“隐形英雄”。他们通宵达旦,手指在键盘上跳跃,创造出一个个令人惊叹的数字世界。有趣的是,你可能注意到了一个现象:程序员似乎总是不关电脑。这并非他们对电脑上瘾࿰…...

Kafka快速实战以及基本原理详解
Kafka快速实战以及基本原理详解 基本概念 Kafka是一个分布式、支持分区、多副本,基于ZK的分布式消息系统,最大的特性就是可以实时的处理大量数据以满足各种需求场景,比如Hadoop的批处理系统、低延迟的实时系统、Storm/Spark流式处理引擎、日…...

微信小程序(4)- 事件系统和模板语法
1. 事件系统 1.1 事件绑定和事件对象 小程序中绑定事件与在网页开发中绑定事件几乎一致,只不过在小程序不能通过 on 的方式绑定事件,也没有 click 等事件,小程序中绑定事件使用 bind 方法,click 事件也需要使用 tap 事件来进行代…...

【Java多线程】对线程池的理解并模拟实现线程池
目录 1、池 1.1、线程池 2、ThreadPoolExecutor 线程池类 3、Executors 工厂类 4、模拟实现线程池 1、池 “池”这个概念见到非常多,例如常量池、数据库连接池、线程池、进程池、内存池。 所谓“池”的概念就是:(提高效率) 1…...

python连接mysql数据库
连接MySQL数据库,通常我们会使用Python的mysql-connector-python库。下面是一个基本的示例来展示如何使用Python连接到MySQL数据库。 首先,确保你已经安装了mysql-connector-python库。如果没有,你可以使用pip来安装它: pip ins…...

docker用法
首先需要去docker官网注册你的账号,记住账号名称和密码; 然后在本地执行: docker login登录OK。 把ubuntu下载到本地: sudo docker pull ubuntusudo docker images输出: REPOSITORY TAG …...

DIcom调试Planar configuration
最近和CBCT组同事调dicom图像 这边得图像模块老不兼容对方得dicom文件。 vtk兼容,自己写得原生解析不兼容。 给对方调好了格式,下次生成文件还会有错。 简单记录下,日后备查。 今天对方又加了 个字段:Planar configuration 查…...

C#与VisionPro联合开发——跳转页面
1、跳转页面并打开相机 From1 所有代码展示 using System; using System.IO; using System.Windows.Forms; //引入VisionPro命名空间 using Cognex.VisionPro;namespace ConnectCamera {public partial class Form1 : Form {public Form1() {InitializeComponent();}CogAcqFif…...

服务端测试开发必备技能:Mock测试
什么是mock测试 Mock 测试就是在测试活动中,对于某些不容易构造或者不容易获取的数据/场景,用一个Mock对象来创建以便测试的测试方法。 Mock测试常见场景 无法控制第三方系统接口的返回,返回的数据不满足要求依赖的接口还未开发完成&#…...

vue3中ref创建变量取值时自动补充 .value 插件 volar
插件 TypeScript Vue Plugin (Volar) 设置中配置...

clickhouse的docker部署与springboot整合
注意:镜像bitnami/clickhouse包含服务端和客户端,yandex版本需要使用yandex/clickhouse-server,yandex/clickhouse-server docker启动命令(允许空密码 -e ALLOW_EMPTY_PASSWORD=yes),clickhouse版本不同,配置文件在的位置也会不一样/etc/clickhouse-server/config.xml d…...

Node.js_基础知识(计算机硬件基础)
主机的基本组成 CPU:Central Processing Unit,即中央处理器,是计算机的核心部件。是一块集成电路芯片,能够执行计算机指令并控制计算机的各种操作,负责运算和处理数据内存:是电脑硬件中的一块电路板,用于暂时存储CPU中的运算数据,是计算机与CPU进行沟通的桥梁,负责存储…...

git bash :download.sh: line 1: wget: command not found(已解决)
Windows中git bash完全可以替代原生的cmd,但是对于git bash会有一些Linux下广泛使用的命令的缺失,比如wget命令。 1、下载wget.exe,地址:https://eternallybored.org/misc/wget/ 2、将wget.exe 拷贝到C:\Program Files\Git\ming…...

BlackberryQ10 是可以安装 Android 4.3 应用的,Web UserAgent 版本信息
BlackberryQ10 是可以安装 Android 4.3 应用的 最近淘了个 Q10 手机,非常稀罕它,拿着手感一流。这么好的东西,就想给它装点东西,但目前所有的应用都已经抛弃这个安卓版本了。 一、开发环境介绍 BlackBerry Q10 的 安卓版本是 4.…...

JS前端高频面试
JS数据类型有哪些,区别是什么 js数据类型分为原始数据类型和引用数据类型。 原始数据类型包括:number,string,boolean,null,undefined,和es6新增的两种类型:bigint 和 symbol。&am…...

Flask数据库操作-Flask-SQLAlchemy
Flask中一般使用flask-sqlalchemy来操作数据库。flask-sqlalchemy的使用介绍如下: 一、SQLAlchemy SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销…...

H5获取手机相机或相册图片两种方式-Android通过webview传递多张照片给H5
需求目的: 手机机通过webView展示H5网页,在特殊场景下,需要使用相机拍照或者从相册获取照片,上传后台。 完整流程效果: 如下图 一、H5界面样例代码 使用html文件格式,文件直接打开就可以展示布局&#…...

mysql进阶学习 | DAY 14
存储引擎 体系结构 连接层 服务层 引擎层 存储层 存储引擎 表类型 查看引擎 查看建表语句 指定存储引擎 ENGINE SHOW engins InnoDB 默认存储引擎 遵循ACID模型 支持事务 行级锁 提高并发访问性能 支持外键 FOREIGN KEY约束 保证数据完整性和正确性 对应文件 xx…...

使用GPT生成python图表
首先,生成一脚本,读取到所需的excel表格 import xlrddata xlrd.open_workbook(xxxx.xls) # 打开xls文件 table data.sheet_by_index(0) # 通过索引获取表格# 初始化奖项字典 awards_dict {"一等奖": 0,"二等奖": 0,"三等…...

[深度学习]yolov9+deepsort+pyqt5实现目标追踪
【YOLOv9DeepSORTPyQt5追踪介绍】 随着人工智能技术的飞速发展,目标追踪在视频监控、自动驾驶等领域的应用日益广泛。其中,YOLOv9作为先进的目标检测算法,结合DeepSORT多目标追踪算法和PyQt5图形界面库,能够为用户提供高效、直观…...

C#_WaitAll、WhenAll、async及await
Task.WhenAll、Task.WaitAll Task.WhenAll 和 Task.WaitAll 都是用于等待多个任务完成的方法,但它们之间有一些重要的区别。 返回类型: Task.WhenAll: 返回一个 Task 对象,该对象表示所有输入任务的联合任务。 Task.WaitAll: 没有返回值。它是一个同步方…...

leetcode hot100零钱兑换Ⅱ
本题可以看出也是背包问题,但区别于之前的01背包问题,这个是完全背包问题的变形形式。 下面介绍01背包和完全背包的区别与联系: 01背包是背包中的物品只能用一次,不可以重复使用,而完全背包则是可以重复使用。01/完全…...

路由器配置DMZ主机映射
路由器配置DMZ主机映射 光猫路由模式配置方法 光猫路由模式是用光猫进行拨号连接,所有设备通过光猫访问互联网,只需要设置光猫的DMZ主机映射地址为局域网主机即可 光猫桥接模式配置方法 光猫桥接模式,是穿透光猫,通过路由器拨…...