学习日志2021.1.22
位运算
计算机能够直接存储的数据只有数字
数字以二进制补码的形式存储
-
进制
2进制:
100101
(0-1)八进制:
25147
(0-7)16进制:
af
,1a45
,ffff00
(0-9,a-f/A-F)num = 89 num1 = 0b10100 num2 = 0o566 num3 = 0xff112
都是
int
类型print
直接转换十进制bin()
二进制转换oct()
八进制hex()
十六进制 -
原码、反码、补码
原码:最高位为符号位,后面是数的真值(数字绝对值的二进制)
在python中存储数据的最小单位是字节 一个字节八位,需要高位加零补满,并用符号位表示正负
10(原码):00001010 一个字节八位补齐 第一位改为0 表示正数
10(原码):00000000 00000000 00000000 00001010 c语言中的存储格式
-10(原码):10001010
反码:正数的原码、反码、补码不变,原码的符号位不变,其余各位取反
10(反码):00001010
-10(反码):11110101
补码:反码加一
110 + 111 == 1101
10(补码):00001010
-10(补码):11110110
-
为什么需要补码
计算机对存储内容只存在加法,减法相当于加上相反数,如果用原码负数相加
3(原码):00000011
-2(原码):10000010
3-2=-5
3(补码):00000011
-2(补码):11111110
3-2=1
-
位运算
&(按位与)、|(按位或)、^(异或)、~(取反)、<<(左移)、>>(右移)
& 类似且 1 & 1 = 1、 1 & 0 = 0 、0 & 0 = 0
应用:
任何数&1 判断奇偶性 结果是1为奇数
左右移 快速乘以2的x次方(直接抛弃右移溢出,左移溢出则加大存储字节)x > 0 左移
x< 0 右移