基础:原码,反码,补码
一、按位与:&
二、按位或:|
三、按位异或:^
四、按位取反:~
(左右移铺垫:原码、反码、补码)
五、左移:<<
六、右移:>>
注:位运算是针对于整数不适用于浮点型
计算机中的运算都是以补码的形式进行运算的
基础:原码,反码,补码
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
大厂笔试题目:定义的两个变量,在不创建第
三个变量的条件下交换两个变量的值
三个变量的条件下交换两个变量的值