程序设计

数据的表示

进制转换

进制说明举例基数位权
二进制(B)只有0和1两个数字101122的K次方
八进制以0开头,包含0-7的数字07688的K次方
十进制(D)以0-9十个数字为基础1231010的K次方
十六进制(H)以0x或0X开头,包含0-9和A-F的数字0x1A1616的K次方
  • 权展开法解析
    • 二进制100010101 转 十进制
      $100010101_2 
      = 1*2^8 + 0*2^7 + 0*2^6 + 0*2^5 + 1*2^4 + 0*2^3 + 1*2^2 + 0*2^1 + 1*2^0 
      = 256 + 16 + 4 + 1 = 277$
      
  • 十进制转二进制使用短除法(除基取余法)
2|231
2|111
2|51
2|20

23R :  1110
  • 二进制转8 / 16进制
//8进制
R: 10_001_110
8:  2  1   6

//16进制
R1000_1110
16:  8   E

码制(原码/反码/补码/移码)

  • 原码:二进制表示的数值,最高位表示符号位,0表示正数,1表示负数
  • 反码:正数的反码与原码相同,负数的反码是符号位不变,其余位取反
  • 补码:正数的补码与原码相同,负数的补码是其反码加1
  • 移码:补码的符号位按位取反;阶码的移码表示,移码=阶码+偏移量,偏移量为2^(n-1)-1,n为阶码位数

** 进制计算中,1-1 实际为 1+(-1) **

码制数值1数值-11-1 【实际为:1+(-1)】
原码0000 00011000 00011000 0010 (值:-2)
反码0000 00011111 11101111 1111 (值:-0)
补码0000 00011111 11110000 0000 (值: 0)
移码1000 00010111 11111000 0000 (移码的加减运算和常规不同,较为特殊)

计算机计算过程中,使用补码来进行计算

码制定点整数定点小数数码个数
原码-(2^(n-1) - 1) ~ + (2^(n-1) - 1)2^n -1
反码-(2^(n-1) - 1) ~ + (2^(n-1) - 1)1111 11102^n -1
补码-2^(n-1) ~ + (2^(n-1) -1)1111 11112^n
移码-2^(n-1) ~ + (2^(n-1) -1)0111 11112^n-1

浮点数的表示

  • 单精度浮点数(32位)

    • 符号位(S):0表示正数,1表示负数
    • 阶码(E):8位,用移码表示,范围是-127~128
    • 尾数(M):23位,二进制小数,范围是[1,2)-1
    • 数值范围:±(1+M)*2^(E-127)
    • 例子:-0.75的单精度浮点数表示
      • 符号位:1
      • 原码:0.75的二进制表示为0.11
      • 移码:-0.11
      • 阶码:127-1=126,移码表示为0111 1110
      • 补码:1 0111 1110
      • 最终表示:1 0111 1110 1000 0000 0000 0000 0000 0000
  • 双精度浮点数(64位)

    • 符号位(S):0表示正数,1表示负数
    • 阶码(E):11位,用移码表示,范围是-1023~1024
    • 尾数(M):52位,二进制小数,范围是[1,2)-1
    • 数值范围:±(1+M)*2^(E-1023)
    • 例子:-0.75的双精度浮点数表示
      • 符号位:1
      • 原码:0.75的二进制表示为0.11
      • 移码:-0.11
      • 阶码:1023-1=1022,移码表示为0111 1111 1101
      • 补码:1 0111 1111 1101
      • 最终表示:1 0111 1111 1101 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

逻辑运算

  • 与(&):两个操作数都为真时,结果才为真
  • 或(|):两个操作数中有一个为真时,结果就为真
  • 非(!):操作数为真时,结果为假;操作数为假时,结果为真
  • 异或(^):两个操作数不相同时,结果为真;两个操作数相同时,结果为假

上次更新:
贡献者: Chris-Wen