!与~有什么区别

简介: !与~有什么区别

我们都知道!与~都是用于取反的。那么这两个有什么区别呢?

我们百度结果如下,很明显,八股文。我接下来将会用实际例子解释。


将整型数据转换为二进制的函数

我们先看一个将数据转换为2进制的函数。具体是怎么实现的不要纠结,如果有基础的可以自己研究一下。我们只要知道,仅需要更改两个define部分即可


注意:因为&左右都必须是整型,所以这个函数不能将浮点数据转换为2进制

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define  Type       int  //设置需要转换进制的变量类型
#define  ChangeNum  32   //设置需要转换进制的变量具体数值
//conversion of number systems 进制转换函数
void CONS(Type x)
{
  char i;
  unsigned short Num = sizeof(Type)* 8;
  Type b = 0, flag;
  for (i = 1; i <= Num; i++)
  {
    flag = 1 << (Num - i);
    b = (flag & x) ? 1 : 0;  //因为&左右都必须是整型,所以这个函数不能将浮点数据转换为2进制
    printf("%d", b);
    if (i % 4 == 0)printf(" ");
  }
  printf("\n");
}
int main()
{
  Type a = ChangeNum;
  CONS(a);
  return 0;
}


利用函数查看!与~之后的数据有何不同

以一个非0数据作为例子

(1)我们发现,原来a是第6个bit为1。


(2)经过~之后,除了第6个bit,其他bit全部为1。因为int型数据有4个字节,也就是32个bit,所以这里会先是32个bit数据。~的作用就是,把这个数据的每一bit都取反,将每一个bit0变成1,1变成0。


(3)经过'!'之后,我们发现全部变成0了。那么'!'作用是什么呢?'!'这个是逻辑运算,在逻辑运算中,只存在0和非0两种情况,现在十进制32不等于0,那么我们就可以称之为非0。所以现在会将其变为0。


以0作为例子

现在我们将ChangeNum改为0,看看结果如何。


(1)经过~之后,我们发现所有数据都变为1了。这也印证了把这个数据的每一bit都取反。


(2)经过'!'之后,我们发现只有第一个bit变成了1,其他的都是0。这又是为什么呢?因为,在逻辑运算中,只存在0和非0两种状态,当非0逻辑取反(也就是!之后),结果为0。但是如果0进行逻辑取反,却是1。这个没有为什么,就是规定!


目录
相关文章
|
存储 人工智能 程序员
溢出、截断、类型提升:从易错代码入手分析整型数据存储与类型转换
这篇文章介绍了关于数据在内存中的存储以及可能出现的溢出问题,包括整型数据的存储方式、取值范围以及溢出的现象和原因。文章通过例子和罗盘图解释了整型数据溢出时的计算过程,并指出在进行运算时要注意数据类型的转换和可能的溢出情况。此外,文章还给出了几个练习题,帮助读者理解和应用这些知识。
462 0
|
开发框架 .NET 编译器
总结一下 C# 如何自定义特性 Attribute 并进行应用
总结一下 C# 如何自定义特性 Attribute 并进行应用
314 1
|
JavaScript vr&ar 数据库
技术笔记:Js获取当前日期时间及其它操作
技术笔记:Js获取当前日期时间及其它操作
498 1
|
Oracle 关系型数据库 Java
实时计算 Flink版操作报错合集之cdc postgres数据库,当表行记录修改后报错,该如何修改
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
安全 5G 网络安全
5G网络时代的挑战与机遇
【6月更文挑战第28天】5G时代,超高速率与低延迟开启新纪元,但也伴随网络安全挑战(如5Ghoul漏洞)与技术、市场难题。同时,5G驱动数字化转型、新兴产业繁荣及智能化服务升级,孕育无限商机。应对策略包括强化网络安全、攻克技术难关、提升市场认知,以把握5G带来的变革力量,共创美好未来。
|
JavaScript
IPD体系进阶:组织体系诊断7S模型
这篇内容概述了IPD变革的重要性,并介绍了麦肯锡7S模型作为组织诊断工具的角色。7S模型包括:共享愿景、战略、结构、制度、风格、员工和技能,强调了这些要素对企业成功的影响。文章提到了IPD资源群的最新更新,包含IPD流程计划阶段的模板和表单,供付费学员下载学习。更新内容涵盖WBS计划、产品设计、版本规划等多个方面。
334 0
|
存储 对象存储 Python
使用Python脚本重命名OSS目录
因为OSS中本质上没有"目录"这一概念,所有对象(Object)都是以键(Key)的形式存储的,目录结构是通过对象键的前缀和分隔符来模拟的。因此,批量重命名目录实际上是批量更改一组对象的键的前缀。具体来说,需要列举特定目录下所有对象以获取它们的键,然后为每个对象生成新的键,这通常包括替换或添加前缀。接下来,通过复制操作将每个对象移到新的键位置,实质上为它们创建了新的键对应的对象。一旦确认所有对象都成功复制,就进行批量删除,移除那些与原始键相对应的对象。本文提供了一个Python脚本用于实现重命名OSS目录。
|
Shell 开发工具 计算机视觉
【vision transformer】DETR原理及代码详解(三)
【vision transformer】DETR原理及代码详解
305 0
场效应三极管及其放大电路(1)MOSFET详解
场效应三极管及其放大电路(1)MOSFET详解
1464 1
|
SQL 弹性计算 运维