一阶段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进制转换成其他进制:辗转取余法;
例如 十进制转换二进制:

十进制30转换二进制11110

即十进制的数字30转换成二进制为11110;
例如十进制转换八进制:

十进制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字节

数据单位

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);

输出结果

3、转义字符

一些特能和具有特殊意义的字符,直接放在字符串的引号中无效,需通过\来转义;
print("hello\"world") # hello"world 中间双引号之前不加\,会报语法错误

输出结果
\n表示换行;

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

输出结果
\' 表示 '
\\ 表示 \
转义字符列表
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,219评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,363评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,933评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,020评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,400评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,640评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,896评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,597评论 0 199
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,327评论 1 244
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,581评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,072评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,399评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,054评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,083评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,849评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,672评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,585评论 2 270

推荐阅读更多精彩内容