原码反码补码位运算,

进制转换:

  • 十进制转二进制:
    求余法:用2对数据求余,然后再对商继续求余,直到商为0结束,过程中产生的余数就是该数据的二进制(逆序)。
    求权法:数据 - 2^(n-1) 如果可以减 第n位就是1,否则是0。

  • 二进制转十进制:每位的2^(n-1) 求和
    10101100 128+32+8+4 172

注意:二进制数据转换成八或十六进制是为了方便记录二进制数据。

二进制转八进制:三位二进制对应一个八进制。
    二进制 1 010 110 010 101 100
    八进制 1  2   6   2   5   4
    十进制 44204

二进制转十六进制:由于计算机的发展八进制不能满足需要,因此引入十六进制来记录二进制。
    四位二进制对应一个十六进制。
    二进制 1010 1100 1010 1100
    十六进制  A    C    A    C
    十进制 44204

在C代码中:以0开头的是八进制数据,以0x开头的是十六进制数据。
%x 以十六进制形式显示数据
%o 以八进制形式显示数据

原码、反码、补码:

补码:数据在内存存储的二进制。
    正数的原码就是补码。
    负数的补码:
        1、绝对值转换成二进制得到原码
        2、原码按位求反得到反码
        3、反码+1得到补码

    -127
    01111111 原码
    10000000 反码
    10000001 补码
补码转换成数据:
    无符号补码直接转换成十进制。
    有符号最高位是0,说明是正数,也直接转换成十进制。
    有符号且最高位是1:
        1、补码-1得到反码
        2、反码按位求反得到原码
        3、原码转换成10进制加负号

    11111111 补码 有符号
    11111110 反码
    00000001 原码
    -1

注意:计算机中的数据都是有类型(存储空间是固定的)

位运算符:

A & B 按位相与
    01011010 0x5A
    11000011 0xC3
    --------
    01000010 0x42
A | B 按位或
    01011010 0x5A
    11000011 0xC3
    --------
    11011011 0xDB
~A 按位求反
    01011010 0x5A
    10100101 0xA5
A ^ B
    01011010 0x5A
    11000011 0xC3
    --------
    10011001 0x99
A << n 把A补码左移n位,左边的丢弃,右边补0
    01011010 << 4
    10100000
A >> n 把A补码右移n位,右边的丢弃,左边补符号位
    11000011 >> 4
    11111100

练习2:输入一个整数,把它的4~7位设置1010,其它位置不变。
    n & ~(f<<4) | 0xA0
练习3:输入两个整数,把A的4~7位设置为B的3~6位,其它位置不变。
    a & ~(0xf0) | (b << 1 & 0xf0)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值