美文网首页
(1)C语言基础,学习笔记(原码 反码 补码 )

(1)C语言基础,学习笔记(原码 反码 补码 )

作者: 王多鱼2 | 来源:发表于2019-10-29 00:46 被阅读0次

    字长

    • 是CPU的主要技术指标之一,指的是CPU一次最大能并行处理的二进制位数。
    • 现在主流的自算计字长是32位与64位
    • 字长的长度是不固定的,对于不同的CPU、字长的长度也不一样.8位的CPU一次只能处理一个字节,而32位的 CPU一次就能处理4个字节,同理字长为64位的CPU一次可以处理8个字节.

    原码,反码,补码(二进制)

    • 为了表示负数,将最高位解释为符号位
    • 正数的原码,反码,补码均相同
    • 对于负数,已知原码求反码,符号位不变,其他位按位求反
    • 对于负数,已知原码求补码,先求反码,再在反码末位加1
    假设我们的计算机字长8位 1字节 = 8bit
    10的二进制 原码 0000 1010 
                       反码  0000 1010      
                       补码 0000 1010 
    -10的二进制 原码 1000 1010
                         反码 1111 0101
                             +                 1
                         补码  1111 0110
    

    在计算机里面 数值 一律用补码来表示(存储)
    为什么用补码存: 符号位和其他的位统一处理 减法也可以按照加法来处理

    举例 :5 -10 = -5 =》 5+ (-10)
    5 补码 0000 0101
    -5补码 -》 原码 1000 0101 -》反码 1111 1010 -》补码 1111 1011
      0000 0101(5的补码)  +1111 0110 (-10的补码)= 1111  1011 (-5的补码)
    

    特殊值
    0 原码 0000 0000
    反码 0000 0000
    补码 0000 0000

    8位整数里原码的取值范围为-127到+127 反码也是
    但补码是-128到+127,所以 -128的补码应该是10000000

    数值
    127 原码 0111 1111 反码 0111 1111 补码0111 1111
    -127 原码 1111 1111 反码 1000 0000 补码1000 0001

    -128 无 无 1000 0000

    4. char c = 128; 以下都是拿的以为上海兄弟的笔记;

    printf("%d\n",c);
    printf("%hhd\n",c);
    printf("%hd\n",c);
    printf("%hu\n",c);
    输出结果,解释为什么是这样的? 
    
    1. 4.1 格式输出符
      格式符号 意义
      %a 浮点数、十六进制数字和p-记数法 (C99)
      %A 浮点数、十六进制数字和P-记数法 (C99)
      %c 一个字符
      %d 有符号十进制整数
      %e 浮点数、e-记数法
      %E 浮点数、E-记数法
      %f 浮点数,十进制记数法
      %g 根据数值不同自动选择%f或者%e。%e格式在指数小于-4或者大于等于精度时使用
      %G 根据数值不同自动选择%f或者%E。%E格式在指数小于-4或者大于等于精度时使用
      %i 有符号十进制整数 (与%d相同)
      %o 无符号八进制整数
      %p 指针(就是指地址)
      %s 字符串
      %u 无符号十进制整数
      %x 使用十六进制数字0f 的无符号十六进制整数
      %X 使用十六进制数字0F的无符号十六进制整数
      %% 打印一个百分号
    TIM截图20191029004306.png 16.png 25.png 35.png ![![ 35.png

    相关文章

      网友评论

          本文标题:(1)C语言基础,学习笔记(原码 反码 补码 )

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