!和~有什么区别
目录
我们都知道!与~都是用于取反的。那么这两个有什么区别呢?
我们百度结果如下,很明显,八股文。我接下来将会用实际例子解释。
将整型数据转换为二进制的函数
我们先看一个将数据转换为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
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13