首页 > 编程知识 正文

16进制按位取反,按位取反运算符怎么用

时间:2023-05-05 16:15:00 阅读:39472 作者:4975

首先请理解“反码”、“取反”、“按位取反(~)”这三个概念不同。

逆(取0变量1,1变量0 )对-1取逆,使-1为二进制形式的10000000000000000000000000000001,然后与编码比特一起取逆) 0变量1,1变量0 ),取http://www.Sina.com01111111111111111111111111111110则相反。

对-1取反二进制数:对100000000000000000000000000000000000000001取反二进制数: 0111111111111111110原著、反码和补码原著,第一位表示编码比特,第

/

-1的反码: 1111111111111111111111111111111111100的反码: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

-1补码: 111111111111111111111111111111111111100000000000000001补码: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

例如-1

-1的原码: 100000000000000000000000000000000000000001-1的反码: 11111111111111111111111

用VS2019验证一下吧。

int main () inta=-1; 返回0; 使用VS2019-F11-调试-窗口-内存-输入a

可以看到a的地址存储在01111111111111111111111111111110中。 这是十六进制数,转换后得到11111111111111111111111111111111

倒排位那么倒排位是怎么工作的呢?

数字作为补数存储在存储器中,因此要以位为单位反转,首先将该数字的补数,包括符号位进行反转。

例如,相对于0按每个比特反转。

0的原码: 000000000000000000000000000000000的反码: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

反过来取11111111111111111111111111111111,即为ff ff ff ff

但是,请注意,此时编译器不会直接输出当前结果11111111111111111111111111111111。 因为那是补数的相反。

接下来进行逆运算,导出补码00000000000000000000000000000000的原始代码是什么。

补码: 11111111111111111111111111111111111111111111111111111100000000000001原码导出为http://www

写个程序验证一下吧

int main () inta=0; printf(%d(n )、~a ); 返回0; }运行结果

总结:要理解逐位取反码“~”的结构,首先要弄清楚原码、反码和补码的变换,然后理解逐位取反码是在存储器内反取数据的补码,反过来还原取的结果,恢复成原码

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。