!与~有什么区别

简介: !与~有什么区别

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

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


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

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


目录
相关文章
|
3月前
|
存储 缓存 移动开发
uinapp的setStorageSync和setStorage的区别
uinapp的setStorageSync和setStorage的区别
|
6月前
for in 和 for of的区别
for in 和 for of的区别
2039 3
#{} 和 ${} 的区别是什么?
#{} 和 ${} 的区别是什么?
108 0
|
Java
While 与 do while 的区别
While 与 do while 的区别
82 0
|
JSON 数据格式
for...in/for...each/for...of的区别
for...in/for...each/for...of的区别
138 0
for...in/for...each/for...of的区别
|
C语言
%C和%S区别
%C和%S区别
271 0
backgroundColor与 tintColors的区别
backgroundColor与 tintColors的区别
133 0
backgroundColor与 tintColors的区别
rsaCheckV2 和rsaCheckV1的区别分享
说明: 目前支付宝的SDK验签方法主要有两种一种是rsaCheckV1一种是rsaCheckV2 两种验签方法用于不同的接口的返回参数验签 1.rsaCheckV1验签方法   rsaCheckV1验签方法主要用于支付接口的返回参数的验签比如:当面付,APP支付,手机网站支付,电脑网站支付 这些接口都是使用rsaCheckV1方法验签的 2.
3634 11
|
关系型数据库
Where and Having区别
Where和Having的异同 (1)where是查询返回结果之前进行过滤的 (2)having是查询返回结果之后,对结果进行过滤的 (3)在SQL中增加 HAVING 子句原因是,where关键字无法与聚合函数一起使用,having子句常跟group by一同使用,过滤分组...
1508 0