python按位取反_python赋值运算符

python按位取反_python赋值运算符Python中的~(按位取反)运算的理解:按照我平时的理解,当我使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果(这点没问题)例如,假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下:5的二进制表达式为:00000000000000000000000000000101执行~运算…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

Python中的~(按位取反)运算的理解:

按照我平时的理解,当我使用~按位取反运算的时候,计算机会将操作数所对应的二进制表达式的每一个位进行取反计算,取反后所得到的值就是~按位取反的运算结果(这点没问题)

例如,假如我的计算机是32位的,我接下来要计算~5的值,计算过程如下:

5 的二进制表达式为:0000 0000 0000 0000 0000 0000 0000 0101

执行~运算,即~5后: 1111 1111 1111 1111 1111 1111 1111 1010,即结果为-6

以上过程没有任何问题,但我们如果忘记了负数的二进制表达方式,那么就会对这个结果产生疑问,为什么1111 1111 1111 1111 1111 1111 1111 1010表示-6,可能我们会以为它应该表示-10等等,所以,理解~按位取反的另一个关键就是理解1111 1111 1111 1111 1111 1111 1111 1010为什么表示-6,也即理解负数的二进制表达方式。

现在计算机普遍使用补码表示负数。知道一个数的补码,要求其值的方法是:首先看符号位也就是最左的一位,如果是1代表是负数(-)如果是0代码是正数(+),然后对该值取反再+1,得到其源码。

例如本例中得到的 1111 1111 1111 1111 1111 1111 1111 1010,其符号位(最左一位)是1,表明它表示的是负数,欲求其源码,需先对其取反,然后再加1:0000 0000 0000 0000 0000 0000 0000 0101 + 1 = 0000 0000 0000 0000 0000 0000 0000 0110,然后在得到的源码前加一个负号,即-0000 0000 0000 0000 0000 0000 0000 0110 = -6。以上便是对~按位取反运算以及负数的二进制表示的理解,不难发现,在求源码的时候,要将补码进行取反后再加1,然而这个补码原本就是之前由~运算时,对原来的操作数通过~按位取反而得来的,所以,此时在求该补码的源码时的取反操作,相当于将补码变回了原来的那个操作数,之后进行的加1操作就相当于对原来的操作数进行加1,只不过结果变成了他的相反数。

因此,可以总结出~按位取反的计算结论是:~n = -(n+1)

例如本例中,~5 = -(5+1),即~5 = -6

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/170473.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(二)——自定义安装

    使用WiX Toolset创建.NET程序发布Bootstrapper(安装策略管理)(二)——自定义安装自定义产品卸载方式        继续从上一次的基础上前进,现在我们已经知道了最简单的bootstrapper打包方法,现在我们对其中的每个节点深入自定义,争取可以达到我们需要的效果。先把最后全部的XML贴出来。

    2022年7月20日
    13
  • ORA-01102的解决办法

    ORA-01102的解决办法

    2021年5月27日
    112
  • C 语言中负数移位运算讲解

    C 语言中负数移位运算讲解C语言中负数移位运算讲解“<<”、“>>”为移位运算符。“<<”为左移位运算符,即数据字节中的每个二进制位同时向左移位。如“x<<n”表示x中的每个二进制位同时向左移动n位。“>>”为右移位运算符,即数据字节中的每个二进制位同时向右移位。如“x>>n”表示x中的每个二进制位同时向右移动n位。下图…

    2022年7月14日
    20
  • 浅谈md5加密[通俗易懂]

    浅谈md5加密[通俗易懂]md5加密是我们生活中十分常见的加密算法。我是最近在写一个H5的项目时接触到的这个算法,这个算法极大的引起了我的好奇心,是登陆界面,要求是将用户输入的密码使用md5加密之后,再传回服务器,当时我十分不理解原因是什么.废话少说原因密码在前端进行加密,然后服务器使用摘要进行比对,这样在整个密码的校验过程中是在服务器端不知道明码的情况下进行的,极大的保证了密码的安全在避免文件内容被篡改

    2022年7月11日
    11
  • Java创建数组的方法

    Java创建数组的方法最近在学Java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章!本章介绍的创建数组的各种方法,并对它们进行了对比和剖析,最后还扩展了一些知识。

    2022年6月7日
    33
  • C#多线程编程_wpf和winform的区别

    C#多线程编程_wpf和winform的区别目录1.多线程描述2.线程生命周期3.线程的常用属性与方法4.线程操作(1)创建线程(2)管理线程(3)销毁线程1.多线程描述线程被定义为程序的执行路径。每个线程都定义了一个独特的控制流。在多线程之下可以通过分配线程,同时处理多个任务。2.线程生命周期线程生命周期开始于System.Threading.Thread类的对象被创建时,结束于线程被终止或完成执行时。下面列出了线程生命周期中的各种状态:未启动状态:当线程实例被创建但Start方法未被调用时的状况。就绪状

    2022年10月21日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号