1、位操作符

0 篇文章 0 订阅

本文用来记录学习笔记

位与:&  用来给某一位进行写0操作(与1位与无变化,与0位与变成0) ,特定位清零 。例:0xAA&0xF0 = 0xA0

位或:|   用来给某一位进行写1操作(与0或与无变化,与1位或变成1) ,特定位置1。例:0xAA|0xF0 = 0xFA

位异或:^  用来给某一位进行取反操作(与0位异或无变化,与1位异或变取反),特定位取反 。例:0xAA^0xF0=0x5A

对寄存器进行操作修改某一位时,应先读取寄存器的值给某一变量。对这一变量进行位操作,然后再将这一变量赋予寄存器。简而言之:读、改、写。这样做的目的是在不改变其它位的值的情况下,只对特定位进行修改。

 

位取反:~ 有符号数和无符号数有区别

对于无符号数:直接按位取反即可

对于有符号数,按位取反、减1取反(反码转换为原码)

例:   

    int a = 45;
    unsigned int c = 45;
    int b,d;
    b = ~a;
    d = ~c;
    printf("bx=%x.\n",b);
    printf("b=%d.\n",b);
    printf("dx=%x.\n", d);
    printf("d=%u.\n", d);

结果:

bx=ffffffd2.
b=-46.
dx=ffffffd2.
d=4294967250.

对于无符号数按位取反比较简单,在这里不进行详细阐述

对于有符号数,以十进制数45为例进行阐述,本系统中int是4字节,即32位:

十进制数45转换为十六进制数为0x0000002d;

按位取反为0xffffff2d(有符号数在计算机中以补码形式保存,故此处为所求结果的补码形式)

将补码形式转换为原码为减1取反为0x8000002e,最后将结果转换为十进制为-46       

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值