位运算详解运用———大厂笔试题目(细节)

发布于:2022-12-11 ⋅ 阅读:(695) ⋅ 点赞:(0)

基础:原码,反码,补码

一、按位与:&

二、按位或:|

三、按位异或:^

四、按位取反:~

(左右移铺垫:原码、反码、补码)

五、左移:<<

六、右移:>>

注:位运算是针对于整数不适用于浮点型

       计算机中的运算都是以补码的形式进行运算的

基础:原码,反码,补码

1、正整数的原码,反码,补码是一样的我们主要讨论负整数的情况

2、在计算机中整形为(4个字节)32个比特位而32位比特位中最高位即最左边的比特位表示符号当做左边为1时代表该二进制数为负数

注:66

如-1的原码为:10000000 00000000 00000000 00000001

而1的原码为:  00000000 00000000 00000000 00000001

3、原码:正数为对应的二进制数,负数为将对应正数的二进制数的最高位改为1,如上文的1和-1;

4、反码:符号位不变其余为取反

eg:-9的原码为:10000000 00000000 00000000 00001001

      -9的反码为:11111111  11111111   11111111   11110110

5、补码:反码加1

eg1: -9的反码为:11111111  11111111   11111111   11110110

      -9的补码为:11111111  11111111   11111111   11110111

eg2:-6的反码为:11111111  11111111   11111111   11111001

       -6的补码为:11111111  11111111   11111111   11111010//末尾加一进1

6:原码为补码的补码(除符号位取反后加一)

一、按位与:&:对应位置的两个二进制数都为1则结果为1,否之为0

eg:

int a=3;//补码为00000000 00000000 00000000 00000011

int b=5;//补码为00000000 00000000 00000000 00000101

int c=a&b;//c为        00000000 00000000 00000000 00000001

二:按位或  |   :两个数的补码对应位置只要有一个为1结果就为1

int a=-3;//补码为11111111  11111111   11111111   11111101

int b=5;//补码为00000000 00000000 00000000 00000101

int c=a|b;//c为11111111  11111111   11111111   11111101

//c的源码为:10000000 00000000 00000000 00000011可计算出c为-3

三、按位异或^:补码对应位置不同的结果为1;

eg:

int a=3;//补码为   00000000 00000000 00000000 00000011

int b=5;//补码为   00000000 00000000 00000000 00000101

int c=a^b;//c为     00000000 00000000 00000000 00000110 c的值为6

四、按位取反~:将将所有位置取反

eg:

int a=-2;//补码为:11111111  11111111   11111111   11111110

b=~a;//a取反为:00000000 00000000 00000000 00000001 则b的值为1

五、左移<<:把左边的运算数的二进制位全部左移n个位置,右边的位置由0来补充即高位丢弃低位补0;例如a<<n表示降a的补码向左移动n个比特位(二进制位)

eg:

int a=1;//二进制位为:00000000 00000000 00000000 00000001

int b=a<<1; //二进制位为:00000000 00000000 00000000 00000100

六、右移>>:把32个比特位(二进制位)右移动移n个位置,

若是正数则左边的位置由0来补充;

若是负数则左边的位置由1来补充;

eg:

int a=5;//补码为:00000000 00000000 00000000 00000101

int b=a>>2;//右移侯的补码为:00000000 00000000 00000000 00000001

int a=-5;//原码为:10000000 00000000 00000000 00000101

             //补码为:11111111  11111111   11111111   11111011

int b=a>>2;//右移后的补码为:11111111  11111111   11111111   11111111即值为-1

大厂笔试题目:定义的两个变量,在不创建第

三个变量的条件下交换两个变量的值

三个变量的条件下交换两个变量的值

 

 

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到