zoukankan      html  css  js  c++  java
  • 二进制计算题

    比如十进制的32 = 2*10的0次方 加上 3*10的一次方

    以此类推

    二进制:逢二进一

    二进制(0,1)
    二进制的最高位为符号位 0表负数 1为负数
    正数的原码 反码 补码 都是一样的
    负数的反码=它的原码符号位不变,其他位取反 0变1 1变零
    负数的补码=反码加1
    0的反码 补码都是0
    PHP没有无符号数
    计算机运算的时候都是以补码的方式运算的

    举例:
    -1的原码为
    10000000 00000000 00000000 00000001
    反码为
    11111111 11111111 11111111 11111110
    补码为
    11111111 11111111 11111111 11111111

    一个二进制字符 占用四个字节 一个字节等于8个bit
    那么1的二进制表示为
    00000000 00000000 00000000 00000001

    PHP 位运算符号
    & 按位与 两位全为1 结果为1
    | 按位或 两位有一个为1 结果就为1
    ^ 按位异或 一个为0 一个为1 结果为1
    ~ 俺位取反 0->1 1->0

    d emo
    ~2 = ?
    步骤:
    先找出2的补码(正数的反码 原码 补码都是同一个)
    00000000 00000000 00000000 00000010
    再按位取反
    11111111 11111111 11111111 111111101(补码-> 原码)
    11111111 11111111 11111111 111111100 反码
    10000000 00000000 00000000 000000011 原码
    1+1*2的零次方 + 1* 2的一次方 = -3

    2&3 =?
    2的补码
    00000000 00000000 00000000 000000010
    3的补码
    00000000 00000000 00000000 000000011
    所以得
    到补码为

    00000000 00000000 00000000 000000010
    正数的补码 反码 都是一样
    所以
    答案是2

    其他的类推

    PHP 移位运算符
    << 算数坐移
    >>

    对二进制数进行移动
    运算规则:
    算术右移:低位溢出,符号位不变,并且符号位补溢出的高位

    算术左移:符号位不变,低位补零

    demo:
    $a = 1>>2
    1的补码
    00000000 00000000 00000000 00000001
    01 溢出 在高位补符号位 00(符号位不变)
    答案是0

    $a = -1<<2
    10000000 00000000 00000000 00000001 原码
    11111111 11111111 11111111 11111110 反码
    11111111 11111111 11111111 11111111 补码

    11111111 11111111 11111111 11111100

    11111111 11111111 11111111 11111011

    10000000 00000000 00000000 00000100

    -4


    积累知识,分享知识,学习知识。
  • 相关阅读:
    json学习系列(1)-使用json所要用到的jar包下载
    Java 时间架构图
    时间纪元与时区介绍
    HTML5 Canvas 绘制库存变化折线
    HTML5 Canvas 笛卡尔坐标系转换尝试
    像孩童一样欣喜的看着自己的成长
    《老炮儿》结尾貌似历史上的一幕
    很多人还在守着金饭碗要饭
    还是用文本编辑器编程让人愉悦
    Node.js 网页爬虫再进阶,cheerio助力
  • 原文地址:https://www.cnblogs.com/bin-pureLife/p/3777175.html
Copyright © 2011-2022 走看看