A. python按位取反9为什么会得到-10计算步骤是什么啊
~9的计算步骤:
转二进制:0 1001
计算补码:0 1001
按位取反:1 0110
转为原码:1 0110
按位取反:1 1001 反码
末位加一:1 1010 补码
符号位为1是负数,即-10
规律:~x=-(x+1);
因此,t=~9(1001)并不能输出6(0110),而是-10;
B. 请问python中为什么~True等于-2另外除了~还有没有其他取反操作符
去反是按位去反?那只有这个符号“~”
True是一个bit,bool型,按位去反会扩展成int型,True的默认值是1即0x0000_0001( 假设int为32位)
所以~True为0xffff_fffe, 也就是-2 ( 补码-2)
如果不是按位去反的操作可以直接用not, not True
C. 在python中为什么不能对字符取反
python 3的整型以16bit递增。
0xf0 =0b 0000 0000 1111 0000
~0xf0之后得到1111 1111 0000 1111
[1][111 1111 0000 1111]
确定是负数,有负数等于绝对值反码加一。求补码形式。
绝对值减1得:111 1111 0000 1110
反码得:000 0000 1111 0001
得-0xf1即-241(你那的~a[0]得-241)
要求得到[0,256),限定一下范围即可。
D. python中两个等号符号,怎么用键盘打出来
Python中提供了各种各样的运算符帮助我们解决各种实际问题。Python中的运算符主要包括算术运算符、比较运算符、位运算符、逻辑运算符和赋值运算符。下面将一一介绍这些运算符的具体种类和使用方法。
算术运算符
算术运算符帮助我们完成各种各样的算术运算,如加减乘除等。Python中的算术运算符的种类如下表所示:
下面在Python中演示一个例子看看其具体输出情况:
x = 7
y = 3
print(x+y)
print(x-y)
print(x*y)
print(x/y)
print(x**y)
print(x//y)
print(7.0/3)
print(7.0//3)
print(7//3.0)
print(7.0//3.0)
上面程序在Python自带的IDLE中的运行情况如下图所示:
比较运算符
比较运算符的作用是对变量或表达式的结果进行大小或真假的比较。其计算结果有两种:True或False。
下表中给出了Python中所有的比较运算符的形式以及其含义。
表中的x、y、a和b的取值:x = 7, y = 8,a = 4, b = 7
在Python3.8.2Shell中运行上面的例子,其结果如下图所示:
赋值运算符
Python中,变量无须定义,可以直接使用,即在使用时,可以直接把基本赋值运算符“=”右边的值赋给左边的变量,也可以进行某些运算后再赋值给左边的变量。
Python中的赋值运算符有两种形式:
(1)基本的赋值运算符,即单个“=”,其把右边的值或运算结果赋给左边的变量;
(2)复合的赋值运算符,即由算术运算符和“=”组合成的赋值运算符,其兼有运算和赋值的功能,如+=,相当于左边的操作数加上右边的操作数后,再赋值给左边的操作数。
在Python中常用的赋值运算符如下表所示。
在Python IDLE中使用上面赋值运算符操作的例子如下图所示:
上面的例子中要注意 c=-13,c //=3 这个结果,//相当于向下取整。
最后一个例子中x %= 3,由于前面运算完毕后,x的值为4.8,这里进行取模运算后,结果应该是1.8,但由于精度问题,显示成了图所示的结果。
逻辑运算符
Python有三种逻辑运算符:逻辑与,逻辑或和逻辑非。
一、基本用法
(1)and : 逻辑与
and运算需要两个操作数,如果参与运算的两个操作数都为True,则结果为True,否则运算结果为False。
b1 = True
b2 = True
b3 = False
b4 = False
print( b1 and b2)
print( b1 and b3)
print( b3 and b1)
print( b3 and b4)
其运行结果如下:
从运算结果可以总结出:如果and左侧操作数为False,则结果为False,否则为右侧操作数的值。
(2)or : 逻辑或
逻辑or运算也需要两个操作数,如果参与or运算的两个操作数有一个为True,则运算结果为True;两个操作数都False时,则返回结果False.
b1 = True
b2 = True
b3 = False
b4 = False
print( b1 or b2)
print( b2 or b3)
print( b3 or b4)
print( b3 or b1)
其运算结果如下:
可以看出,如果or左侧操作数的值为True,则结果为True,否则为右侧操作数的结果。
(3)not : 逻辑非
not只需要一个操作数,它对原值取反,即操作数为True时,非运算完后为False;原操作数为False时,非运算完后True。
b1 = True
b2 = False
print( not b1)
print( not b2)
其运算结果如下:
在Python中,逻辑运算符可以运用到非逻辑类型的数据中。
二、用于非逻辑数据类型
Python中,非0的数值类型被视为True,0被视为False;非空字符串被视True,空字符串被视为False。
1、and:逻辑与
(1)数字参与的运算
b1 = 2
b2 = 3
b3 = 0
print(b1 and b2)
print(b1 and b3)
print(b3 and b1)
其运算结果如下:
可以简单的概括为:如果and左侧为0,则结果为0,否则返回右侧操作数的值。
(2)字符串运算
s1 = "百家号"
s2 = "翔宇亭IT乐园"
s3 = ''
s4 = ''
print( s1 and s2)
print( s1 and s3)
print( s3 and s2)
print( s3 and s4)
其运算结果如下:
从运算结果可以简单总结:左操作数如果为空字符串,则返回空,否则为右侧操作数的值。
2、or:逻辑或
(1)数字参与的运算
b1 = 2
b2 = 3
b3 = 0
b4 = 0
print( b1 or b2)
print( b2 or b1)
print( b2 or b3)
print( b3 or b2)
print( b3 or b4)
其在Python3.8.2中的运算结果如下:
从上面的运算结果可以总结:如果or左侧的操作数是非0值,则返回左侧的数值,否则返回右侧操作数的值。
(2)字符串参与的运算
s1 = "翔宇亭IT乐园"
s2 = "biye5ucom"
s3 = ''
s4 = ''
print( s1 or s2)
print( s2 or s1)
print( s1 or s3)
print( s3 or s2)
print( s3 or s4)
其在Python3.8.2中的运算结果如下:
从上面结果可以总结:如果or左侧操作数为非空字符串,则返回左操作数的值,否则返回右侧操作数的值。
3、not:逻辑非
(1)有数字参与的运算
从上面可以看出:非0值取反后结果为False,0值取反后结果为True。
(2)有字符串参与的运算
从上面的运算结果来看:非空字符串取反后结果为False,空字符串取反后结果为True。
位运算符
位运算符也称二进制运算符,并且这些运算符只用于对整型数进行运算。
进行位运算时,整型数被转换为二进制形式,然后位运算符对每位执行有关运算后,将结果再转换回十进制形式,并返回给用户。
Python中共有6种位运算符:
(1)&:按位与运算
对应位上的二进制数进行与运算,如果参加位运算的两个二进制数为1,则结果为1,只要有一个为0,则结果为0,如10和4进行按位与运算,他们对应的二进制形式分别为:1010 和 100,则:
1 0 1 0
& 0 1 0 0
-----------
0 0 0 0
即10和4按位与运算的结果为二进制的0,也对应着10进制的0,最终结果即为0,即 10 & 4 = 0
再如,5和6进行按位与运算,其对应的二进制形式分别为: 101 和 110,
0 1 0 1
& 0 1 1 0
-------------
0 1 0 0
其运算结果为二进制的100,即十进制的4,也就是说: 5 & 6 = 4
在Python中的运行结果如下:
(2)按位或运算
按位或运算是二进制对应的每位进行或运算。如果对应的两位都为0,则结果为0,只要有一个为1,则结果为1。
10 和 4的或运算:
1 0 1 0
| 0 1 0 0
------------
1 1 1 0
其或运算的结果为二进制的 1110,对应着十进制的 14,即 10 | 4 = 14.
5 和 6的或运算:
0 1 0 1
| 0 1 1 0
------------
0 1 1 1
5 和 6的按位或运算结果为 0111,对应的十进制为 7 ,即 5 | 6 = 7.
在Python中的运行结果:
(3)按位异或运算
按位异或运算,即对应的两个二进制位不同时,结果为1,否则为0.
10 和 4 的按位异或运算:
1 0 1 0
^ 0 1 0 0
------------
1 1 1 0
即,结果为二进制1110,对应的十进制为14,亦即: 10 ^ 4 = 14
5 和 6 的按位异或运算:
0 1 0 1
^0 1 1 0
------------
0 0 1 1
0011对应的十进制数为3,也就是说: 5 ^ 6 = 3
在Python中的运行结果:
(4)按位取反运算符
该运算是单操作数运算符,即其只需要一个操作数参与运算。运算时,二进制数上的每位取反,即1变为0, 0变为1.
这里涉及到数字在计算机中的存储形式,在计算机中,最高位为符号位,符号位为0时表示正数,符号位为1时表示负数。
数字在计算机中是以补码的形式进行存储的,整数的补码与原码相同,负数的补码是在原码的基础上除符号位外,按位取反后,再加1.
如 +1,原码为0 0001,补码为 0 0001.
-1 ,原码为1 0001,补码为:1 1111。
再如:+2 ,原码为: 0 0010,补码为:0 0010.
-2,原码为:1 0010,补码为:1 1110
10按位取反运算(第1位为符号位):
~ 0 1 0 1 0
--------------
1 0 1 0 1
结果最高位为1,为负数,因为负数在计算机中以补码形式存储,转换为原码(先减1,再按位反)为:
1 1011
即对应的十进制数为 -11,即: ~10 = -11.
5 按位取反运算:
~ 0 0 1 0 1
---------------
1 1 0 1 0
结果对应的原码为: 1 0110,对应的十进制数为:-6
在Python中的运行结果:
(5)<<:按位左移运算符
其形式为:m<<n
按位左移运算,m对应的二进制数的每位向左移动n位,后面补0.
如10的二进制数 1010 向左移动两位后为:10 1000,其对应的十进制数为:40.
5的二进制数:0101,向左移动两位后为:1 0100,其对应的十进制数为:20
也就是说,一个整数左移n位相当于这个数 m×2n
在Python中的运算结果:
(6)>>:按位右移运算符
其形式为:m >> n
即m对应的二进制数每位向右移动n位,移出的二进制数字去掉,最左边空出的变为0.
10的二进制 1010 向右移动1位为:0101,即变为十进制的5;再移动1位变为0010,变为2,再移动1位变为0001,变为1,再移动就一直为0了。
即每向右移动1位,相当于原数除以2,只保留整数部分;移动n位,相当于原数除以2n,只保留整数部分。
在Python中的运算结果:
以上详细讲解了Python中各种运算符的使用方法,如果你对Python、R等感兴趣,欢迎关注我,本号将持续更新相关内容的文章。
E. 求python取原码、补码、反码的方法或函数
原码:原码是二进制数字的一种简单的表示法。二进制首位为符号位,1代表负,0代表正。
反码:反码可由原码得到。如果是正数,反码与原码相同;如果是负数,反码是其原码(符号位除外)各位取反而得到的。
补码:补码可由原码得到。如果是正数,补码与原码相同;如果是负数,补码是对其原码(除符号位外)各位取反,并在末位加1而得到的(有进位则进位,但不改变符号位)。
python有按位取反的操作符:~ 但是对负整数要小心操作,因为在计算机系统中,数值一律用补码来表示和存储的。
F. 我想问下python中 逻辑与:“&”和“and”的区别
1、“&”和“and”有本质区别,属于不同类型的运行符号。& 是位运算;and 是逻辑运算。
2、首先是&:该运输符属于字符串的连接运算符,例如,“w“&”c“结果为字符串”wc“。
3、and属于逻辑运算符,表示逻辑与运算,其规则是有假取假,全真为真。例如,true and false结果为false,true and true结果为true。
(6)python取反扩展阅读
Python的设计哲学是“优雅”、“明确”、“简单”。因此,Perl语言中“总是有多种方法来做同一件事”的理念在Python开发者中通常是难以忍受的。Python开发者的哲学是“用一种方法,最好是只有一种方法来做一件事”。
在设计Python语言时,如果面临多种选择,Python开发者一般会拒绝花俏的语法,而选择明确的没有或者很少有歧义的语法。
由于这种设计观念的差异,Python源代码通常被认为比Perl具备更好的可读性,并且能够支撑大规模的软件开发。这些准则被称为Python格言。在Python解释器内运行import this可以获得完整的列表。
Python开发人员尽量避开不成熟或者不重要的优化。一些针对非重要部位的加快运行速度的补丁通常不会被合并到Python内。所以很多人认为Python很慢。
不过,根据二八定律,大多数程序对速度要求不高。在某些对运行速度要求很高的情况,Python设计师倾向于使用JIT技术,或者用使用C/C++语言改写这部分程序。可用的JIT技术是PyPy。
Python是完全面向对象的语言。函数、模块、数字、字符串都是对象。并且完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。
Python支持重载运算符和动态类型。相对于Lisp这种传统的函数式编程语言,Python对函数式设计只提供了有限的支持。有两个标准库(functools, itertools)提供了Haskell和Standard ML中久经考验的函数式程序设计工具。
虽然Python可能被粗略地分类为“脚本语言”(script language),但实际上一些大规模软件开发计划例如Zope、Mnet及BitTorrent,Google也广泛地使用它。
Python的支持者较喜欢称它为一种高级动态编程语言,原因是“脚本语言”泛指仅作简单程序设计任务的语言,如shellscript、VBScript等只能处理简单任务的编程语言,并不能与Python相提并论。
Python本身被设计为可扩充的。并非所有的特性和功能都集成到语言核心。Python提供了丰富的API和工具,以便程序员能够轻松地使用C语言、C++、Cython来编写扩充模块。Python编译器本身也可以被集成到其它需要脚本语言的程序内。
因此,很多人还把Python作为一种“胶水语言”(glue language)使用。使用Python将其他语言编写的程序进行集成和封装。在Google内部的很多项目,例如Google Engine使用C++编写性能要求极高的部分,然后用Python或Java/Go调用相应的模块。
《Python技术手册》的作者马特利(Alex Martelli)说:“这很难讲,不过,2004 年,Python 已在Google内部使用,Google 召募许多 Python 高手,但在这之前就已决定使用Python,
他们的目的是 Python where we can, C++ where we must,在操控硬件的场合使用 C++,在快速开发时候使用 Python。”
G. python中的if not 怎么用
python中的if not的用法说明如下:
1、if的语法为:if 条件为真:执行语句,而not是取反的意思。
2、从上面的解释可理解为:if not 条件为真:执行语句<==>if 条件不为真:执行语句。
3、举例:if n>3:print "True",假如n=3,就打印“True”。如果加上not,即为if not n>3:print “True”,就有:n<=3,才会打印“True"。
(7)python取反扩展阅读:
python中的“if not 1”:
if条件语句后面需要跟随bool类型的数据,即True或者False。然而,如果不是bool类型的数据,可以将其转换成bool类型的数据,转换的过程是隐式的。
在Python中,None、空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False。除此之外的其它对象都会被转化成True。
在命令“if not 1”中,1便会转换为bool类型的True。not是逻辑运算符非,not 1则恒为False。因此if语句if not 1之下的语句,永远不会执行。
H. python在通过opencv调用摄像头实时显示的时候如何取反色
感觉只能自己写个函数,把视频的每一帧图像按像素值计算。
I. python中的进制转换和原码,反码,补码
python中的进制转换和原码,反码,补码
计算机文件大小单位
b = bit 位(比特)
B = Byte 字节
1Byte = 8 bit #一个字节等于8位 可以简写成 1B = 8b
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
进制分类
二进制:由2个数字组成,有0 和 1 python中标志:0b
八进制:由8个数字组成,有0,1,2,3,4,5,6,7 python中标志:0o
十进制:有10个数字组成,有0,1,2,3,4,5,6,7,8,9 python中标志:无
十六进制:有16个数字组成,有0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f(进制字母大小写都可以,分别代表10,11,12,13,14,15) python中标志:0x
python中的进制转换:
其他进制转换为十进制:int(相应进制)
其他进制转换为二进制:bin(相应进制)
其他进制转换为八进制:oct(相应进制)
其他进制转换为十六进制:hex(相应进制)
二进制 转化成 十进制:
例: 0b10100101
运算:1* 2^0 + 0* 2^1 + 1* 2^2 + 0* 2^3 + 0* 2^4 + 1* 2^5 + 0* 2^6 + 1* 2^7=
1 + 0 + 4 + 0 + 0 + 32 + 0 + 128 = 165
八进制 转化成 十进制:
例: 0o127
运算:7*8^0 + 2*8^1 + 1*8^2 = 7+16+64 = 87
十六进制 转化成 十进制:
例: 0xff
运算:15*16^0 + 15*16^1 = 255
十进制 转化成 二进制:
426 => 0b110101010
运算过程: 用426除以2,得出的结果再去不停地除以2,
直到除完最后的结果小于2停止,
在把每个阶段求得的余数从下到上依次拼接完毕即可
十进制 转化成 八进制:
426 => 0o652
运算过程: 用426除以8,得出的结果再去不停地除以8,
直到除完最后的结果小于8停止,
在把每个阶段求得的余数从下到上依次拼接完毕即可
十进制 转化成 十六进制:
运算过程: 用426除以16,得出的结果再去不停地除以16,
直到除完最后的结果小于16停止,
在把每个阶段求得的余数从下到上依次拼接完毕即可。
相关推荐:《Python视频教程》
原码,反码,补码
实际人们看到的数字是原码转化之后显示出来的。
而原码是通过补码得到的。
计算机的所有数据在底层都是以二进制的补码形式存储。
***进制转换的时候需要先把内存存储的补码拿出来变成原码在进行转换输出***
反码:二进制码0变1,1变0叫做反码,反码用于原码补码之间的转换。
补码:用来做数据的存储运算,可以实现计算机底层的减法操作,因而提出(可以表达出一个数的正负)。
也就是说默认计算机只会做加法,例:5+(-3) => 5 - 3。
乘法除法是通过左移和右移 << >> 来实现。
正数高位补0,负数高位补1。
正数:
原码 = 反码 = 补码
负数:
反码 = 原码取反(除高位)
补码 = 反码加1
反码 = 补码减1
原码 = 反码取反(除高位)
我们会发现,在取反前减1和在取反后加1的效果是一样的,这就和-2-1 = -(2+1)一个道理,所以会得出这样的规律:
原码 = 补码取反加1
补码 = 原码取反加1
一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 叫符号位正数为0, 负数为1。
比如
正数1在计算机中的存储即为
0 00000000000000000000001
负数1 在计算机中的存储即为
1 00000000000000000000001
一个正数,转换为二进制位就是这个正数的原码。负数的绝对值转换成二进制位然后在高位补1就是这个负数的原码。
正数的反码就是原码,负数的反码等于原码除符号位以外所有的位取反。
正数的补码与原码相同,负数的补码为 其原码除符号位外所有位取反(得到反码了),然后最低位加1。
所以原码,反码,补码正数情况下是一致的,负数情况下是不一致的。
计算机的运算过程实际就是补码相加的一个过程。
比如-2 + 3
-2 的原码为
1 000000000000000000000000010
反码为:
1 111111111111111111111111101
补码为:
1 111111111111111111111111110
3的原码为
0 000000000000000000000000011
反码为:
0 000000000000000000000000011
补码为:
0 000000000000000000000000011
那么二者补码相加结果为
1 111111111111111111111111110
+
0 000000000000000000000000011
=
10 000000000000000000000000001(计算机存储为32位,故前面溢出的1被舍弃,高位为0)
0 000000000000000000000000001
结果为1
再比如-2 + 1
-2 的原码为
1 000000000000000000000000010
反码为:
1 111111111111111111111111101
补码为:
1 111111111111111111111111110
1的原码为
0 000000000000000000000000001
1的反码为:
0 000000000000000000000000001
1的补码为:
0 000000000000000000000000001
二者的补码相加结果为
1 111111111111111111111111110
+
0 000000000000000000000000001
=
1 111111111111111111111111111
得出的补码转化为原码, 最低位减一得到反码,然后除符号位外所有位取反,得到结果
1 000000000000000000000000001
结果为1