变量、运算符与数据类型、位运算
- 1.注释
- 2.运算符
- 算术运算符
- 比较运算符
- 位运算符
- 三元运算符
- 变量和赋值
- 3.位运算
- 原码、反码、补码
- 按位与、或、非、异或
1.注释
代码中,# 用于单行注释,’’’ ‘’’ 、""" “”" 表示区间注释,用于多行注释
2.运算符
算术运算符
包括 +、-、*、/、//(取整)、**(幂)
比较运算符
包括 >、>=、<、<=、==、!=,返回的是 布尔类型
位运算符
~ 按位取反
& 按位与
| 按位或
^ 按位异或
<< 左移
.>>右移
~取反运算符:
二进制数在内存中以补码的形式存在;
正数的原码、补码和反码都相同;
负数的反码和原码符号位相同,数值取反,补码是在反码的基础上加1 按位取反运算符~ ~4:
转二进制:0 0100
计算补码:0 0100
按位取反:1 1011
转为原码:1 1011
按位取反:1 0100
计算补码:1 0101
规律:~x=-(x+1)
三元运算符
if-else语句合并
x, y = 4, 5
if x < y:
small = x
else:
small = y
print(small) # 4
x, y = 4, 5
small = x if x < y else y
print(small) # 4
in(存在),not in(不存在),代替for进行遍历
letters = ['A', 'B', 'C']
if 'A' in letters:
print('A' + ' exists')
if 'h' not in letters:
print('h' + ' not exists')
# A exists
# h not exists
is(是),is not(不是)
x, y = 4, 5
small = x if x < y else y
print(small) # 4
letters = ['A', 'B', 'C']
if 'A' in letters:
print('A' + ' exists')
if 'h' not in letters:
print('h' + ' not exists')
# A exists
# h not exists
在讲is和==这两种运算符区别之前,首先要知道 Python中对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)。
== 是python标准操作符中的比较操作符,用来比较判断 两个对象的value(值)是否相等,例如下面两个字符串间的比较:
is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是 id是否相同。
Python中is和==的区别
>>> a = 1 #a和b为数值类型
>>> b = 1
>>> a is b
True
>>> a = (1,2,3) #a和b为元组类型
>>> b = (1,2,3)
>>> a is b
False
只有数值型和字符串型的情况下,a is b才为True,当a和b是tuple,list,dict或set型时,a is b为False。
变量和赋值
Python 中不需要提前声明变量类型,变量的赋值和声明同时进行
变量名可以包括字母,数字,下划线,但不能是数字开头
int、float、bool
整形(int)
使用print(a)查看变量a的值,使用type(a) 查看变量a的类型;
将整形看成一个对象,对象就应该包括 属性(attributes)和方法(methods),利用dir()查看属性和方法
浮点型(float)
布尔型变量True,False可以直接用于数学运算代表1,0
print(True + True) # 2
利用bool(x)来创建变量True,False,其中x分为两种:
基本类型:整型、浮点型、布尔型
容器类型:字符串、元组、列表、字典和集合
对于数值变量,0, 0.0 都可认为是空的。
对于容器变量,里面没元素就是空的。
3.位运算
原码、反码、补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示;
原码: 就是其二进制表示(注意,最高位是符号位);
反码: 正数的反码就是原码,负数的反码是符号位不变,其余位取反(对应正数按位取反);
补码: 正数的补码就是原码,负数的补码是反码+1。
正数的原码、反码、补码都一样;负数反码是符号位不变,其余位取反,补码是反码+1
按位与、或、非、异或
/**
* 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
*
* 说明:
*
* 你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
*
*/
public static int singleNumber(int[] nums) {
int num = 0;
for (int i = 0; i < nums.length; i++){
/*
涉及到异或运算,对于这道题,你应该了解异或有什么样性质
1. 任何数与0异或,都为原数
2. 与本身自己异或,则为0
3. 交换律和结合律(解决这道题的关键),你把整个循环的计算写成数学运算过程,你会发现要利用交换律
结合律,可以实现这道题的要求
*/
num ^= nums[i];
}
return num;
}
//进行测试
public static void main(String[] args) {
int[] nums = {1,1,2,3,4,4,3,2,5};
System.out.println(singleNumber(nums));
}