社区
C语言
帖子详情
0取反为什么是-1呢?
yukiwang313
2011-03-14 03:44:51
需要解题步骤啊
...全文
5735
11
打赏
收藏
0取反为什么是-1呢?
需要解题步骤啊
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
h100037
2011-03-14
打赏
举报
回复
1
11111111111111111111111111111111 是补码, 计算机里的表现形式
10000000000000000000000000000001 是源码, -1
源码符号位不变,求反 + 1 就是补码。
所以-1在计算机里就是11111111111111111111111111111111, 0 求反刚好是11111111111111111111111111111111
masmaster
2011-03-14
打赏
举报
回复
负数在计算机里以补码的形式存在
yukiwang313
2011-03-14
打赏
举报
回复
10000000000000000000000000000001是补码吧?怎么会是原码
h100037
2011-03-14
打赏
举报
回复
不大好意思, 说错了, 是补码, 不是反码
负数以补码形式存储
h100037
2011-03-14
打赏
举报
回复
10000000000000000000000000000001 是源码, 就是 -1
zhengjiankang
2011-03-14
打赏
举报
回复
-1 是 0x80000000 也就是10000000000000000000000000000000.
h100037
2011-03-14
打赏
举报
回复
计算机内, 负数已反码形式存储, 符号位不变, 源码求反加1, 就是反码
11111111111111111111111111111111 就是
10000000000000000000000000000001 求反 11111111111111111111111111111110
加1 就是 11111111111111111111111111111111
yukiwang313
2011-03-14
打赏
举报
回复
还是不理解。我知道取反是把0变成1,1变成0,然后符号位的区别只是最高位一个是0 一个是1 那其余位呢?加起来怎么是变成-1的????
bdmh
2011-03-14
打赏
举报
回复
带符号和不带符号的区别,带符号的最高位代表符号位
yukiwang313
2011-03-14
打赏
举报
回复
11111111111111111111111111111111为什么会是-1呢?8懂
pathuang68
2011-03-14
打赏
举报
回复
2
0 = 00000000000000000000000000000000
取反11111111111111111111111111111111
如果是带符号的,上面就是-1
C语言按位
取反
~的简单理解
学习按位
取反
时,一直不是很理解,为啥对0
取反
就是-1,对76
取反
就是-77,网上有说记住x+(-x)=-1就可以了,可还是有点难懂。所以我来解释一波? 十进制数 0 的十六进制表示为 0000 0000 对其~
取反
后得到 1111 1111 此时这个值转化为十进制就是255 此时 255-256=-1 同理 76 的十六进制为 0100 1100,
取反
后为1011 0011,转为十进制数为179,256-179= -77 其实就是有符号数的转化,0~255范围内,最大值只能到255,那么255和-1
【-1和-128补码表示问题】定点小数-1的补码是1.0000000;定点整数-128的补码是1,0000000
注:-128的补码和定点小数-1的补码在补码中比较特殊 先看下公式 1. -128的补码是1,0000000? [+0]原=0,000 0000 [-0]原=1,000 0000 [+0]反=0,000 0000 [+0]反=1,111 1111 [+0]补=0,000 0000 [-0]补=0,000 0000 正数的原码补码反码一样 而负数的反码是原码数值位全部
取反
,负数的补码则是原码数值位全部
取反
+1,符号位向上进位得到第九位,得到[-0]补=10,000 0000,但是采用机器字长.
while(~scanf(..))为什么可以这样写
因为读到文件的结束符时,scanf返回值是EOF,也就是-1,而~(-1)的作用就是对-1的按位
取反
。 在计算机中,数字按补码存储,正数的补码和原码一样,负数的补码是其反码+1,反码也就是符号位仍为1,其它是原码
取反
。 以 8 位二进制数来讨论,-1的原码是1000 0001,因此-1的补码就是1111 1111。~(-1)就是包括符号位都
取反
,变成0000 0000。 于是while(...
c语言补码
取反
后什么意思,补码为什么
取反
加一
现在我们知道补码是怎么来的了,也就是为了保证两个相反数对应二进制的和必须是0,然后又不知道谁给它起了补码这个名字。补码补码,有没有感觉两个相反数是互补的呢,也就是任意两个相反数加起来一定等0,其中一个数变大,另一个就一定会变小互补保证结果为0。但是你肯定还在纠结,为啥要按位
取反
,为啥还要加一呢。其实,这涉及到一个二进制减法的问题,你既然知道补码这个概念,就一定会知道有进位丢失这么个东西。现在我们知...
C语言为什么~0 == -1?
今天无意中敲下:#include
int main() { printf("~0 == %d\n", ~0); }输出结果是~0 == -1; 为什么呢?我个人的大概理解如下(不保证对错): 以下假设为32位系统; 0的补码是0x00000000; ~0则是:0xFFFFFFFF(~是按位
取反
,包括不好位,跟“
取反
”不是一个概念) 0xFFFFFFFF的原码是0
C语言
70,040
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章