• C语言基础语法回顾


    10进制转2进制

    使用短除法

    原码、补码与反码

    计算机是用补码来存储数据的,为什么要用引入反码和补码呢?

    • 原码:数字在计算机中的表现形式是二进制,叫做机器数,二进制是带有符号位的,比如:数字 3和-3,二进制表示方法分别为 00000011 和10000011 ,最高位,即最左边的位置是符号位,0表示正,1表示负。
    • 反码:正数的反码与原码相同,负数的反码是在其原码的基础上,符号位不变,其余位数取反。即1变成0,0变成1.
    • 补码:证书的补码与源码相同,负数的补码是在反码的基础上加1.
    十进制数 原码 反码 补码
    3 00000011 00000011 00000011
    -3 10000011 11111100 11111101
    9 00001001 00001001 00001001
    -9 10001001 11110110 11110111

    简单来说引入反码是为了让计算机的基础电路设计变得简单,因为加上一个负数相当于减去一个正数,这样可以让计算机只需要做加法即可。但是这样明显有个弊端,对于数字0来说,会有2个编码表示0:00000000和10000000 ,而0带符号是没有意义的。因此引入了补码,正数的补码是原码本身, 负数的补码是反码+1。 相当于 十进制数 -0,原码:10000000,反码:11111111,补码:溢出,相当于-128 。因此,-128实际上是通过-0的补码来表示的,因此-128没有原码和反码。这样就解决了0的多重表示问题。而且也能多表示一个数字 -128,也就是为什么8位二进制数的表示范围是[-128]到[127]

    按位运算符

    • & 按位与:参与运算的两数,各对应的二进位相与,即都为1则为1,否则为0。
    如9&5:
    00001001
    00000101
    00000001  计算结果,最终为1
    
    • | 按位或:参与运算的两数,各对应的二进位相或,只要有一个为1,则为1.
    如4|2
    00000100
    00000010
    00000110 计算结果,最终为6
    
    • ^ 按位异或:参与运算的两数,各对应的二进位相或,即每个相对应的数字不同则为1.
    如4^2
    00000100
    00000010
    00000110 计算结果,最终也为6
    

    移位运算

    二进制数整体向左或者右移动,缺的部分补0.向左移动相当于乘法,向右移相当于除法。如十进制数字5<<2。二进制表示法为00000101 向左移动2位是 00010100,相当于5乘以2*2.


  • 相关阅读:
    excel
    POJ 1149--PIGS
    A
    强大的sscanf
    hdu 5754 Life Winner Bo(威佐夫博弈)
    hdu 5723 Abandoned country(最小生成树,dfs)
    hdu 5734 Acperience
    The Monocycle,UVa 10047(状态记录广搜)
    Fire!(两次bfs)
    NP-Hard Problemd(二分图判定着色)
  • 原文地址:https://www.cnblogs.com/falcon-fei/p/11060188.html
Copyright © 2020-2023  润新知