逻辑取非和按位取非操作
发布日期:2021-07-01 04:34:34 浏览次数:2 分类:技术文章

本文共 1035 字,大约阅读时间需要 3 分钟。

C语言中提供了取非“!”运算符,而且,定义了“非0”的数值为“真”,“0”数值为“假”,那么,结合取非“!”运算符的操作有:

(1)“!真”结果为“假”;

(2)“!假”结果为“真”;

就是说,对应非0数值,如果使用“!”运算符操作,则结果为0;对于0数值,进行“!”运算符操作,结果为真。注意:C语言对“!”运算符操作结果为“真”的值使用1数值来表示。

逻辑取反“~”运算符,就对一个数值的二进制进行按位取非操作;原来为0的值,变为1,原来为1的值变为0。例如2这个数值,如果存储在1个字节的空间,那么,使用8位表示为:

0000 0010

按位取反之后,其值为:

1111 1101

此时,这个数值当作“有符号数”看待时,则最高位为符号位,符号位的值为1,那么,就表示负数。转换为十进制的过程是:数值位按位取反再加1。所以,对于 1111 1101这样数值,转换过程是:

(1) 数值位按位取反,得到 000 0010;

(2) 数值位再加1,得到 000 0011;

注意:对于负数的表示请参考“有符号数和无符号数”章节。

此时,就是表示-3这个数值。如下是一个测试的例子:

 

测试运行的结果如下:

 

可以看到,有a1这个变量,赋值为5,是一个非0值,其状态为“真”,那么,取“非”操作的结果是“假”,“假”这个结果用0数值表示。然后,把“假”这个结果赋给变量b1,那么,输出b1的值是0值。对于a2变量,赋值为0数值,是“假”的状态,然后,取“非”操作,状态变为“真”,在C语言中,使用1表示,所以,输出b2变量的值是0。

对于c1变量,赋值为2这个数值,然后,进行“取反”操作,就是所有的位都取反,最后赋给c2变量。所以,2这个数值的二进制是0000 0010,然后,每个位都取反,得到 1111 1101。那么,由于c2是char类型,这个char类型是一个有符号类型。所以,c2中存储的数据当作“有符号”数看待。那么,c2中存储的1111 1101数值当作有符号数看待,由于符号位是1,所以,表示为负数。把c2变量转换为十进制表示的过程是:

(1) 数值位按位取反,得到 000 0010;

(2) 数值位再加1,得到 000 0011;

最后,得到c2变量的数值是-3。

更多的交流可以访问:www.mylinux.vip   加QQ:1523520001,微信:13926572996,备注:linux编程;

学习、分享更多的linux C/C++ 编程知识。

转载地址:https://mylinux.blog.csdn.net/article/details/108299100 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:自增和自减运算符
下一篇:C语言小括号改变运算顺序

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月24日 16时32分44秒