【发布时间】:2020-10-27 15:56:35
【问题描述】:
据我所知,~0x00 等于: 第一步,将 0 变为 1,将 1 变为 0,第二步,加 1 第一步:11111111111111111111111111111(计数=32)
第二步:11111111111111111111111111111+1=0
我哪里做错了?
【问题讨论】:
据我所知,~0x00 等于: 第一步,将 0 变为 1,将 1 变为 0,第二步,加 1 第一步:11111111111111111111111111111(计数=32)
第二步:11111111111111111111111111111+1=0
我哪里做错了?
【问题讨论】:
~ 运算符不执行 2 的补码否定。您可以使用一元 - 运算符来做到这一点(假设您的机器使用 2 的补码表示)。
~ 所做的是反转所有位。就是这样,不用加1。
【讨论】:
~ 只反转位,并且所有位为 1 的有符号整数的值为 -1。
The ~ operator does not perform 2's complement negation 不,它只是简单的二进制请求,它不关心什么`补全。
第1步是正确的;没有第 2 步。一元 ~ 不会否定值 (1 => -1),它只会反转位 (0101 => 1010)。
一元 - 否定值,并且在二进制补码系统上将执行与您的两个步骤非常相似的操作。
【讨论】: