• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

!和~有什么区别

武飞扬头像
祸榊
帮助6

目录

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

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

以一个非0数据作为例子 

以0作为例子


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

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

学新通

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

我们先看一个将数据转换为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。这个没有为什么,就是规定!

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfhaaei
系列文章
更多 icon
同类精品
更多 icon
继续加载