数据类型

Posted wsdr95-

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据类型相关的知识,希望对你有一定的参考价值。

存储单位

  • 最小的单位是bit,表示一位二进制的0或1,一般写作‘b‘,是网络数据传输的单位
  • 最小的存储单位是字节,用byte表示,一般写作‘B‘,1B = 8b
  • 1024B = 1KB
  • 1024KB = 1MB
  • 1024MB = 1GB
  • 1024GB = 1TB

进制转换

  • 十进制:
    • 基数是0-9,逢10进1
    • 示例:234 = 2 * 10^2 + 3 * 10^1 + 4 * 10^0 = 200 + 30 + 4 = 234
  • 二进制:
    • 基数0和1,逢2进1
    • 示例:0b110100 = 2^5 + 2^4 + 2^2 = 32 + 16 +4 = 52
    • 十进制转二进制:除2取余,倒序书写
  • 八进制:
    • 基数0-7,逢8进1
    • 八进制转二进制:八进制的1位表示3位二进制
      • 0o123 = 0b 001 010 011
  • 十六进制:
    • 基数0-9、A-F,逢16进1
    • 示例:0xAB = 10 * 16^1 + 11 *16 ^ 0 =160 + 11 = 171
    • 十六进制转二进制:十六进制的1位表示4位的二进制数
      • 0xABC = 0b 1010 1011 1100
  • 计算机中的数据是以哪种进制存储的?为什么?
    • 二进制,因为计算机在设计的时候只识别二进制。
    • 具体原因:稳定性高(0和1)、成本低(技术上容易实现)、与生活中的真假逻辑相吻合(易于解决生活中的问题)
  • 计算机中的数据是如何表示的?
    • 如何表示负数?

      • 最高位作为符号位:0表示正数,1表示负数

      • 虽然牺牲了最高位,但是可以解决负数的表示问题,简化了硬件设计成本

    • 原码反码和补码:是针对负数而言的(正数的三码一致)

      • 负数的反码等于原码的符号位不变,数据位取反

      • 负数的补码等于反码加1

    • 计算机中的数据都是以补码的形式表示的

  • 数据类型

    • 说明:不同的数据类型都是为了解决生活中的实际问题而出现的,而且每种类型都有相关的运算。

    • python中常见数据类型:整型、浮点、布尔、字符串、列表、元组、集合、字典等

    • 整型(int):就是数学中的整数

    • 浮点(float):就是数学中的小数

      # 浮点
      b = 3.14
      print(b, type(b))
      ?
      # 科学计数法
      c = 3.1415e-3
      print(c)
    • 复数(complex):了解


      # 复数
      d = 3 + 5j
      print(type(d))
    • 布尔(bool):对应于生活中的真假逻辑,只有两个值True/False

    • 空(NoneType):空类型,只有一个值None

    • 字符串(str):使用引号括起来的一串字符

      • 定义:单引号、双引号、三个单引号、三个双引号都可以

      • 转义:使特殊意义的字符失去原有的意义,变成普通字符,使用‘‘处理

      • 特殊字符:‘ ‘、‘ ‘、‘ ‘

      • 原始字符:在定义字符串的格式前添加一个字符‘r‘即可,所有的字符都变成了普通字符

    • 列表(list):通过[]进行定义,可以存储一系列的任意数据,是容器类型。


      lt = [1, ‘hello‘, 3.14]
      print(lt, type(lt))
      # 通过下标获取元素,下标是从0开始的
      print(lt[0])
      # 存在越界问题
      # print(lt[3])
    • 元组(tuple):通过()进行定义,可以作为容器存储任意数据,元组是不可修改的。


      tp = (1, 2, 3)
      print(tp, type(tp))
      # 也是通过下标访问元素
      print(tp[0])
      # 定义单个元素的元组,不要忘记后面的逗号
      tp = (1,)
    • 集合(set):通过{}进行定义,也可以作为容器存储任意数据,但是元素不会重复,是无需的。


      s1 = {‘李白‘, ‘杜甫‘, ‘白居易‘, ‘骆宾王‘, ‘苏轼‘, ‘李白‘}
      s2 = {‘李白‘, ‘王安石‘, ‘王维‘}
      print(s1, type(s1))
      # 交集
      print(s1 & s2)
      # 并集
      print(s1 | s2)
      # 差集
      print(s1 - s2)
      print(s2 - s1)
      ?
      # 定义空集合,不能使用{},应该使用set()
      # {}是定义空字典的
      # s = {}
      s = set()
      print(type(s))

      集合经常用于去重操作。

    • 字典(dict):通过{}进行定义

      • 元素是由键值对组成的

      • 键和值之间使用‘:‘连接

      • 键必须是唯一的,值可以是任意的

      • 字典中的键值对可以更改

      • 示例:


      d = {‘name‘: ‘ergou‘, ‘age‘: 20}
      print(d, type(d))
      # 根据键获取值
      print(d[‘name‘])
      # 直接根据键获取值,当键不存在时会报KeyError错
      # print(d[‘height‘])
      # 通过get方法,根据键获取值,有就返回值,没有返回None
      print(d.get(‘height‘))
      # 通过get还可以设置默认值
      print(d.get(‘weight‘, 90))
      ?
      # 统计元素个数
      print(len(lt))
      # 对于字典表示的时键值对的个数
      print(len(d))

    类型转换

    • 隐式类型转换:混合运算、条件判断等场景

    • 强制类型转换:使用专门的函数进行转换


      int:转换为整型,base是用来指明参数的进制类型
      float:转换为浮点数
      str:转换为字符串
      list:转换为列表
      tuple:转换为元组
      set:转换为集合
      dict:转换为字典
    • 示例:


      # 转换为整型
      # a = int(3.84)
      # base:指明参数的进制类型
      a = int(‘123‘, base=8)
      print(a, type(a))
      ?
      b = int(True)
      print(b)
      ?
      # 浮点
      c = float(250)
      print(c, type(c))
      ?
      # 字符串
      d = str(123)
      print(d, type(d))
      ?
      # 列表
      e = list(‘hello‘)
      e = list((1, 2, 3))
      e = list({1, 2, 3})
      # 也可以转换,但是只保留键
      e = list({‘name‘: ‘goudan‘, ‘age‘: 18})
      print(e, type(e))
      ?
      # 元组
      f = tuple([‘小芳‘, ‘小敏‘, ‘小马‘])
      print(f, type(f))
      ?
      # 集合
      g = set([‘小杜‘, ‘小王‘, ‘小杜‘])
      print(g, type(g))
      ?
      # 字典
      lt = [(‘name‘, ‘dahua‘), (‘age‘, 18)]
      h = dict(lt)
      print(h, type(h))
      ?

    字符串操作

    • 示例:


      s1 = ‘hello‘
      s2 = ‘world‘
      # ‘+‘可以直接将字符串拼接在一起
      s3 = ‘(‘ + s1 + ‘ ‘ + s2 + ‘)‘
      print(s3)
      ?
      # ‘*‘可以重复指定的内容
      s4 = s1 * 3
      print(s4)
      ?
      # 统计字符个数
      print(len(s4))
      ?
      s = ‘abcdefg‘
      # 从前面开始提取,下标从0开始
      print(s[0])
      # 从结尾开始提取,下标从-1开始
      print(s[-1])
      ?
      # 切片
      ?
      # 包括起始下标,不包括结束下标,默认步进值为1
      print(s[1:3])
      ?
      # 当一边的边界不指定时,提取到该边界
      print(s[:4])
      print(s[2:])
      print(s[1:-2])
      print(s[-3:])
      print(s[:-2])
      print(s[:])
      ?
      # 完整写法:[起始:结束:步进]
      print(s[::2])
      # 逆序
      print(s[::-1])





































































































































以上是关于数据类型的主要内容,如果未能解决你的问题,请参考以下文章

对“xxx”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。 错误解决一例。(代码片段

视图或片段库为常见数据类型组成 UI

一个具有两种显示类型的片段[关闭]

(转) Java中的负数及基本类型的转型详解

从 Apollo 缓存中读取特定类型的所有片段

Android 上的 Kotlin:如何在片段中使用数据库中的 LiveData?