python字符串反码输出_一阶段day3-进制、原码反码补码、位运算、字符串

一、进制

计算机在存储数据的时候都是以二进制的形式去存储的

十进制、十六进制、八进制、二进制

1、十进制

123、4、65、34255765879808

基数:0、1、2、3、4、5、6、7、8、9;

进位:逢10进1;

每一位的值:123=1 * 100+2 * 10+3 * 1=1 * 10^2 + 2 * 10^1+ 3 * 10^0

2、二进制

所有二进制数都是由0和1组成; 1011、1100

基数:0、1;

进位:逢2进1;

每一位的值: 11011 =1 * 2^4 + 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0=27

print(1 * 2 ** 4+1 * 2 ** 3+0 * 2 ** 2+1 * 2 ** 1+1 * 2 ** 0) #27

即(二进制)11011=(十进制)27

3、八进制

基数:0、1、2、3、4、5、6、7

进位:逢8进1;

每一位的值: 3415 =3 * 8^3 + 4 * 8^2 + 1 * 8^1 + 5 * 8^0=1805

print(3 * 8 ** 3 + 4 * 8 ** 2 + 1 * 8 ** 1 + 5 * 8 ** 0) #1805

即(八进制)3415=(十进制)1805

4、十六进制

基数:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f

进位:逢16进1;

每一位的值: 111 =1 * 16^2 + 1 * 16^1 + 1 * 16^0 = 273

print(1 * 16 ** 2 + 1 * 16 ** 1 + 1 * 16 ** 0) #273

即(十六进制)111=(十进制)273

5、进制之间的转换

a、其他进制转换成10进制:每一数位上的数乘以进制的慕次数,然后求和;

b、10进制转换成其他进制:辗转取余法;

例如 十进制转换二进制:

c98779ffa23d

十进制30转换二进制11110

即十进制的数字30转换成二进制为11110;

例如十进制转换八进制:

c98779ffa23d

十进制30转换八进制36

即十进制的数字30转换成八进制为36;

c、2进制转换8进制:从右往左取数,每取3位二进制转换成1位八进制;

例如: 1 111 111=100* (1* 2^0)+ 10* (1* (2^2+ 2^1+ 2^0 ))+1* (2^2 +2^1 +2^0)=177

d、2进制转换16进制:从右往左取数,每取4位二进制转换成1位十六进制;

例如: 111 1101=0111 1101=

10* (0* 2^3 +1* (2^2 +2^1 +2^0)) +1* (2^3 + 2^2 +2^0)+ 0*2^1=7d;

e、8进制转换2进制:从右往左取数,每取1位八进制转换成3位二进制;

f、16进制转换成2进制:从右往左取数,每取1位十六进制转换成4位二进制;

6、Python对进制的支持

Python支持通过二进制、八进制、十进制、十六进制的形式来直接表示整数;

a、十进制:直接写入的数字的值都是十进制的数;

b、二进制:需要在数字前面加前缀————>0b(零B)

print(0b1111) #15(十进制)

c、八进制:需要在数字前面加前缀————>0o(零欧)

print(0o765) #501(十进制)

d、十六进制:需要在数字前面加前缀————>0x(零叉)

print(0xda23) #55843(十进制)

e、进制的转换(结果是字符串,非数字)

bin(整数)————>将括号内的整数,转换成二进制形式的数

print(bin(31)) #十进制31转二进制 11111

print(bin(0o4327)) #八进制4327转二进制 100011010111

otc(整数)————>将括号内的整数,转换成八进制形式的数

print(oct(31)) #十进制31转八进制37

print(oct(0o4327)) #八进制4327转八进制4327

hex(整数)————>将括号内的整数,转换成十六进制形式的数

print(hex(31)) #十进制31转十六进制 1f

print(hex(0o4327)) #八进制4327转十六进制 x8d7

二、原码、反码和补码

计算机在存数字的时候,存的是数字的二进制的补码

计算机内存的最小单位是位:1位只能存储两个状态

8位 = 1字节

c98779ffa23d

数据单位

a、原码:整数数字的二进制形式

十进制的10的二进制原码就是:1010

最高位是符号位,如果正数符号位为0,负数符号位为1

以16位存储数字的二进制为例

10的原码 00000000 00001010

-10的原码 10000000 00001010

b、反码

正数的反码是它的原码

负数的反码就是这个数的原码符号位不变,然后其他位置上的数取反(0->1,1->0)

-10 -> (原码)10000000 00001010 ->(反码)11111111 11110101

c、补码

正数的补码就是它的原码

负数的补码是它的反码加1

-10 -> (反码)11111111 11110101 -> (补码)1111111 11110110

d、总结:正数的反码和补码都是原码;负数的补码是其反码加1;反码是原码符号位不变,其他位取反;

问题:为什么计算机存储数据的时候存补码?

答:因为计算机中只有加法器,只能进行加操作。

计算机存储数字存的是其补码,其加计算也是在补码上完成的,

但最后结果反馈给人们看的时候,

我们需要看原码,因为补码无法直观展示大小;

原码、反码和补码的意义:原码是反馈给人们直观看的;

反码是一个中间值,目的在于求出补码以及返回原码;

补码是用来给计算机进行加操作的;

三、位运算

计算存储数字存补码,计算的时候也是补码,最后我们看结果看的是原码

位运算符:&(按位与),|(按位或), ^(异或), ~(取反), >>(右移), <<(左移)

1、&(按位与)

数字1 & 数字2 :两个都为1结果才是1,否则为0;

3 & 2 --> 0000 0011 & 0000 0010 == 0000 0010

-3 & 2 --> 1111 1101 & 0000 0010 == 0000 0000

print(3&2) #2

print(-3&2) #0

作用:让指定位上数置零,或者保留某一位上的值;

2、|(按位或)

数字1 | 数字2: 只要有一个为1,结果就是1;两个都为0,结果才是0

3 | 2 --> 0000 0011 | 0000 0010 = 0000 0011

-3 | 2 --> 1111 1101 | 0000 0010 = (补)1111 1111 = (原)1000 0001

print(3|2) #3

print(-3|2) #-1

3.^(异或)

数字1 ^ 数字2: 不同为1,相同为0

3^2 --> 0000 0011 ^ 0000 0010 = 0000 0001

-3^2 --> 1111 1101 ^ 0000 0010 = (补)1111 1111 = 1000 0001

print(3^2) #1

print(-3^2) #-1

4.~(取反)

~数字:将每一位取反

~3 ---> ~0000 0011 = 1111 1100(补) = 1000 0100

~-3 ---> ~1111 1101 = 0000 0010

print(~3) #-4

print(~-3) #2

5.左移(重点掌握)

数字 << 位数: 将补码向左移动指定的位数,

符号位不变,在最后面补指定个数的0

规律(正数和负数都实用):m << n == m * (2^n)

print(10 << 1) # 20 10*2^1=20

print(-10 << 1) # -20 -20*2^1=-20

print(2 << 2) # 8 2*2^2=8

print(-23 << 2) # -92 -23*2^2=-92

# num * 2 == num << 1 ; num * 4 == num << 2

6.右移

数字 >> 位数: 将补码向右移动指定的位数,符号位不变,

在符号位的后面补指定个数的0(正)或者1(负)

规律(只适用于正数):m >> n == m // (2^n)

规律(只适用于能整除的负数):m >> n == m //(2^n)

规律(只适用于不能整除的负数):m >> n == m // (2^n)-1

print(10 >> 1) #5 10/2^1=5 (正数)

print(10 >> 2) #2 10//2^2=2 (正数)

print(-10 >> 1) #-5 -10//2^1=-5 (能被整除的负数)

print(-10 >> 2) #-3 -10//2^2-1=-3 (不能被整除的负数)

四、字符串

1、字符串(str)

定义:Python语言中,通过单引号或者双引号引起来的字符集就是字符串;

字符:字符串里的字符集,就是由各种不同的字符组成的;

例如:'fhoifjskddsjfsdsflds' '2132436570787'

'发挥而疯狂的说法房间欧萨就发你是否对' 'がいに' '关键字'

2、Unicode编码

Python中的字符串的字符采用的是Unicode编码;

Unicode编码:通过两个字节来对一个字符进行编码,

即可对0~2^16-1(65535)个字符进行编码,。它几乎包含了世界上所有的符号;

ASCII编码:通过一个字节来对一个字符进行编码;

Unicode编码中包含了ASCII编码表;

chr(数字):获取括号内的数字在Unicode编码表中对应的字符,

返回的是只有一个字符的字符串;

print(chr(4)) #EOT

ord(字符):获取字符对应的编码值;

print(ord('蒋')) #33931

注意:也可以直接获取字符对应的编码值,格式:\u十六进制的编码值;

n1='gfr\u3124\ua23d积分';

print(n1);

c98779ffa23d

输出结果

3、转义字符

一些特能和具有特殊意义的字符,直接放在字符串的引号中无效,需通过\来转义;

print("hello\"world") # hello"world 中间双引号之前不加\,会报语法错误

c98779ffa23d

输出结果

\n表示换行;

print('好粉丝费\n分手就分手') #在\n所处位置换行

c98779ffa23d

输出结果

\' 表示 '

\\ 表示 \

c98779ffa23d

转义字符列表

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值