前言
在菜鸟教程中学习python3的位运算符时,对取反操作有疑惑,查多番资料后方有收获,故总结,若有不对之处,欢迎指出。
总结
- 整数在内存中以补码的形式存储;
- 正数的原码、反码、补码都是一样的;
- 负数:
- 原码变补码,符号位不变,其余位按位取反后加1;
- 补码变原码,符号位不变,其余位按位取反后加1;
- python中的取反操作是在补码的基础上单纯的按位取反,符号位也包括在内按位取反;
- 取反操作是在内存中完成的,既:补码1→按位取反→补码2;
- print的结果是十进制数,所以得将补码2转成原码再转十进制数;
求~60:
1. 60的原、反、补码:00111100
2. 补码按位取反:11000011 #是个负数,先转原码再转十进制
3. 补码转成原码:11000011→(取反)→10111100→(+1)→10111101
4. 原码转十进制:10111101→-61
求~(-61):
1. -61的原码:10111101
2. -61的补码:11000011
3. 补码按位取反:00111100 #是正数,原补一致,直接转十进制
4. 原码转十进制:00111100→60
参考:https://blog.csdn.net/weixin_43915860/article/details/107656101