美文网首页
2018-09-27 进制与字符串

2018-09-27 进制与字符串

作者: 米某人 | 来源:发表于2018-09-27 20:49 被阅读0次

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

    十进制、十六进制、八进制、二进制、
    1.十进制
    基数:0、1、2、3、4、5、6、7、8、9、
    进位:逢10进1,
    每一位的值:
    123 = 1100 + 210 + 31 = 110^2 + 210^1 + 310^0

    二进制:

    所有的 二进制数都是有0.1 组成只有两个基数
    基数:0.1
    进位:逢2进1 1011
    每一位的值:11011 = 12^0 + 12^1 + 02^2 + 12^3 + 1*2^4

    八进制

    基数:0.1.2.3.4.5.6.7
    进位:逢8进1
    每一位的值:111 = 1 * 8^0 + 1 * 8^1 + 1* 8^2 = 73

    十六进制:

    基数:0~9;a-f(A-f)
    进位:逢16进1
    a(10)b(11)c(12)d(13)e(14)f(15)
    每一位的值: 111 = 116^0 + 116^1 + 1*16^2 = 273

    进制之间的转换:
    其他进制转换成十进制:
    乘积求和,每一位上的数 乘 进制次数 然后求和
    十进制转其他进制:辗转取余法,除到零为止
    123:(2)60 = 111100
    123:(8)173
    123:(16)7B
    二进制转八进制:每3位二进制转换成1位的8进制
    八转二:一位8进制转换成3位的二进制
    671——> 110 111 001
    二进制转16进制:每四二进制转化成1位16进制 (
    位数不够用0站位)
    (16) 67 ——> (2) 0110 0111
    Python支持通过二进制、八进制、
    十进制和十六进制的形式来直接表示一个整数
    a.十进制:直接表示的数字的值都是十进制的数
    b.二进制:需要加前缀 0b

    print(0b1010)
    

    八进制:需要前缀 0o/0o

    print(0o67)
    print(0o34)
    

    十六进制:需要前缀 0x/0X

    print(0x78af)
    print(0Xfa5)
    
    print(type(0xfa))
    

    进制之间的转换:(结果是字符串)

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

    print(bin(10),bin(0o56),bin(0xaf))
    

    bin是转换成二进制

    oct(整数)——> 将括号中的的整数转化成八进制

    print(oct(10), oct(0b110110),oct(0xaf))
    

    oct是转换成八进制
    hex(整数)——> 将括号内的整数转化成十六进制

    print(hex(10),hex(0b110110),hex(0o56))
    

    再次提醒计算机在存数字的时候,

    • 存的是数字的二进制,而且是二进制的补码
    • 计算机内存的最小单位是位:一位只能存储两个状态
    • 8位=1字节
    • 最高位是符号位

    原码:

    整数数字用二进制形式就是原码

    比如十进制的10的原码就是:1010
    正整数的元码
    负数的符号为1
    10原码0000 00001010
    -10的原码 100000 00001010

    反码:

    正数的补码.反码是它的原码
    负数的反码就是这个数的原码的
    负数的补码就是他的反码-1
    -10 ->(反码)11111111 11110101 ——>
    补码 1111111 11110101

    总结:正的反码和补码都是原码,负责的补码反码+1
    反码是元马符号不变,所以其他
    计算机存数字存补码,计算的时候也是补码,最后结果的时候看原码。

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

    数字1 & 数字2:二进制的每一位,
    两个都是为1结果才是1,否则为0
    3&2 ——> 00000011 & 0000001o

    print(3&2)
    

    -3 & 2 —— 11111101 & 00000010 = 00000000

    print(-3&2)
    

    2按位或
    数字1 | 数字2 :只要一个为1 ,结果就是1;
    两个都为,结果才是0
    3 | 2 ——> 00000011 | 00000010 = 00000011
    -3 | 2 ——> 11111101 | 00000010 = (补)11111111
    (原)0000001

    4.(取反)
    ~数字:将每一位取反
    ~3 ---~ 0000011 = 1111100 = 10000100
    作用;让指定位上的数置零,或者保留某一位的
    数字:<< 位数:将补码想做移动指定的位数,
    后面用0补齐
    规律:正负数都适用:#m << n == m * (2^n)

    print(10 << 3)
    print(-10 << 4)
    print()
    

    num * 2 == num << 1 num << 2

    右移:
    数字>>位数: 将补码向右移指定位数,符号位不变,
    在符号位后面补制定个数的0(正),
    负数补(1)
    规律:(只适合于正数):

    m >> n == m // (2^n)

    print(10 >> 1 ) 
    print(10>> 2)
    print(-245 >> 2)
    print(-15 >> 1)
    print(17 << 2)
    

    字符串(str)

    1.什么是字符串
    Python中通过单引号或者上引号引起来的字符集就是字符串

    'SSR'
    '许愿氤氲之息'
    '许愿清泉流响'
    '许愿启明星的指引'
    

    字符集是一切能被引入引号中的集合
    字符串中引号中的字符集,就是各种不同的字符来组成的

    2.Unicode编码

    Python中的字符采用的是Unicode的编码
    Unicode编码,是通过两个字节来对一个字符进行编码
    02^16-1;032768个字符
    几乎包含了世界上所有的符号,
    ASCII编码:是通过一个字节来对一个字符进行编码
    Unicode编码中包含了ASCII码表

    'a' --> 97
    'b' --> 98

    str1 = 'how' 
    str2 = '星辰命运肩甲'
    print(str2)
    

    chr(数字):获取数字在Unicode编码表对应的字符,返回的是只有一个的字符串

    print(chr(0x20a0))
    

    ord(字符):获取字符对应的Unicode码

    print(ord('刘'),ord('雅'),ord('米'))
    print(ord('a'))
    

    可以直接在字符串中写对应的编码值,格式:\u十六进制编码值
    格式:必须是四位的十六进制

    str1 = '\u20b9\u20b5'
    print(str1)
    

    3.转移字符(适用于所有语言):
    一些特殊功能和具有特殊意义的字符,
    直接放在字符串的引号中无效,需要通过\来转义

    • \n --> 换行
    • ' --> '
    • \t --> 制表符
    • \ --> \
    tr1 = '时光\"\"轨迹'
    str2 = '\t铁马\'长戈'
    print(str1)
    print(str2)
    

    相关文章

      网友评论

          本文标题:2018-09-27 进制与字符串

          本文链接:https://www.haomeiwen.com/subject/cuzeoftx.html