社区
C语言
帖子详情
关于取反的符号“~”“!”的疑问
ddoeddoe
2009-04-23 10:31:46
我记得C里面有个取反的符号,按位取反“~”,还有个是非“!”,这两个什么区别?
...全文
16847
14
打赏
收藏
关于取反的符号“~”“!”的疑问
我记得C里面有个取反的符号,按位取反“~”,还有个是非“!”,这两个什么区别?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
chenqianzeng
2012-08-09
打赏
举报
回复
11111010怎么就是-6的啊?怎么得出来啊?刚刚接触c语言
jia611
2010-09-04
打赏
举报
回复
笔试的时候忘记了,郁闷!
liuxu2559
2009-04-23
打赏
举报
回复
[Quote=引用 4 楼 xmanlin 的回复:]
~是按位取反,二进制0变1,1变0. !是逻辑取反, false变true,true变false
[/Quote]
UP
lingyin55
2009-04-23
打赏
举报
回复
[Quote=引用楼主 ddoeddoe 的帖子:]
我记得C里面有个取反的符号,按位取反“~”,还有个是非“!”,这两个什么区别?
[/Quote]
这两个什么区别?
~是对位操作,0变1,1变0.
!是对一个值操作,非0值变0。
记住是否对位操作就可以区别它们了。
xmanlin
2009-04-23
打赏
举报
回复
~是按位取反,二进制0变1,1变0. !是逻辑取反, false变true,true变false
Lovegarfield
2009-04-23
打赏
举报
回复
取反是按位取反1变0,0变1.和!他两之间八竿子都打不到的关系啊!
arong1234
2009-04-23
打赏
举报
回复
~是按位取反,例如整数3,二进制形式是
00000000000000000000000000000011,按位取反后就是
11111111111111111111111111111100
!是逻辑否,一个非0数取否之后就是0,上面的3,用!之后就是0
也就是说,所有的不是0的数用!操作后都是0,只有当操作数等于0xFFFFFFFF的,用!和~的结果值才是一样的
yangqidong
2009-04-23
打赏
举报
回复
!用于把真变假,假变真,在C中,只要不是0就是真
所以
!5值是0
~按位取反
5二进制00000101,取反11111010,代表-6
所以~5值-6
garysoft
2009-04-23
打赏
举报
回复
呵呵...
1楼就没错了..
liliangbao
2009-04-23
打赏
举报
回复
[Quote=引用 1 楼 yangqidong 的回复:]
!用于把真变假,假变真,在C中,只要不是0就是真
所以
!5值是0
~按位取反
5二进制00000101,取反11111010,代表-6
所以~5值-6
[/Quote]
Up~
猫已经找不回了
2009-04-23
打赏
举报
回复
取反是对位进行求反操作.
而!本质是对true和 false的转换.
Skyhoo
2009-04-23
打赏
举报
回复
按位去反是 按照原来保存在内存中的2进制取反,! 是非的意思 逻辑运算符
晨星
2009-04-23
打赏
举报
回复
!实质上只在“真”和“假”之间反转。
而~是操作数值的每一个二进制位。
ForestDB
2009-04-23
打赏
举报
回复
!是逻辑取反。
~是按位取反。
Java进制转换和位运算专题
本课程是零基础学JAVA课程的第二阶段的课程,课程内容详实、细致,讲解通俗易懂!内容包括:Java中的进制转换原理,十进制和二进制、八进制、十六进制的互相转换规律,位运算原理,按位与、按位或、按位
取反
、左移、右移、无
符号
右移的讲解!
C语言位运算的
取反
(~)真实原理解析
首先,在了解位运算
取反
之前,我们要先了解在内存中数据是怎么存储的。 在计算机系统中,数值一律用补码来表示和存储。 什么是补码呢? 正整数的补码:是其二进制表示,与原码相同。eg:假设int 型变量为2字节,int a=10,那么a在内存中是按照原码进行存储的,也即0000 0000 0000 1010 负整数的补码:简单记四个字“变反加一”,什么意思呢,举个例子就明白了。int b=-10,想要知道变量b在内存中是怎样存储的 第一步:算10的原码 也即0000 0000 0000 1010 第二步:
取反
1
python按位
取反
(~)
Python中的~(按位
取反
)运算的理解: 按照我平时的理解,当我使用~按位
取反
运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行
取反
计算,
取反
后所得到的值就是~按位
取反
的运算结果(这点没问题) 例如,假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下: 5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101 执行~运算...
按位
取反
~运算
按位
取反
~运算 首先我们来看按位
取反
的概念 按位
取反
运算符:对数据的每个二进制位
取反
,即把0变成1,把1变成0. 即~x=-x-1 这里按照定义 9的二进制为00001001 其按位
取反
为11110110 结果为-10 这个过程没有任何问题,但是如果忘记了负数的二进制表达方式,就会对这个结果产生
疑问
,为什么11110110表示-10而不是503?理解按位
取反
的关键是理解11110110为什么表示-10,也就是负数的二进制表达方式。 现在计算机普遍使用补码表示负数。 知道补码,求源码的方式是:值
取反
再加1。
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章