移位操作符 位操作符详解

hello hello,想我了吗?

首先是移位操作符:<< 左移操作符     >> 右移操作符

   注:移位操作符的操作数只能是整数。

  << 左移操作符:移位规则: 左边抛弃、右边补0

移位操作符 位操作符详解_第1张图片

 为什么等于20呢?我们来见分晓: 在内存中我们的CPU都是以补码进行计算

00000000000000000000000000001010 --m的原码(10)  正数的 原 反 补码相同;
00000000000000000000000000010100 --左移后--20

 就是向左移一位,左边的抛弃掉,右边的补上0,0010100就是20咯!


>> 右移操作符:首先右移运算分两种:

1. 逻辑移位
左边用0填充,右边丢弃
2. 算术移位
左边用原该值的符号位填充,右边丢弃  逻辑位移和算术位移则取决于编译器

移位操作符 位操作符详解_第2张图片

为什么等于5呢我们来见分晓:

00000000000000000000000000001010 --m的原码(10)
00000000000000000000000000000101 --右移位后 m的原码  0101呢就是我们的5啦


 位操作符:

位操作符有: & // 按位与        | // 按位或           ^ // 按位异或
注:他们的操作数必须是整数。

& //按位与 :只要有0就为0,两个同时为1才为1

移位操作符 位操作符详解_第3张图片

10000000000000000000000000000011 --    -3的原码
11111111111111111111111111111100 --   -3的反码
11111111111111111111111111111101 --   -3的补码
00000000000000000000000000000100 --    4的原码(补码)

//两数按位与 &
11111111111111111111111111111101 --      -3的补码
00000000000000000000000000000100 --   4的原码(补码)
00000000000000000000000000000100 --   是一个正数,那么这个补码就是原码咯,那么就是我们的数字4咯

 


| //按位或 :只要有1就是1,两个同时为0才为0

移位操作符 位操作符详解_第4张图片

10000000000000000000000000000011 -- -3的原码
11111111111111111111111111111100 -- -3的反码
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)

两数按位或 |
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
11111111111111111111111111111101 -- 此时是一位负数的补码,我们要把它转换为原码!

 补码->原码  取反后加一
10000000000000000000000000000010 -- 取反
10000000000000000000000000000011 -- 原码 -- 前面是1后面是0011 那就是我们的-3咯


^ //按位异或:相同为0,相异为1

移位操作符 位操作符详解_第5张图片

10000000000000000000000000000011 -- -3的原码
11111111111111111111111111111100 -- -3的反码
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)

两数按位异或 ^
11111111111111111111111111111101 -- -3的补码
00000000000000000000000000000100 -- 4的原码(补码)
11111111111111111111111111111001 -- 此时是一位负数的补码,我们要把它转换为原码!

 补码->原码  取反后加一
10000000000000000000000000000110 -- 取反
10000000000000000000000000000111 -- 原码 -- 前面是1后面是0111 那就是我们的-7咯

注:取反的时候符号位不变。


下面来分享一道题,不能创建临时变量(第三个变量),实现两个整数的交换。

怎样做这道题呢,其实这时候就可以用到我们的按位异或^。

移位操作符 位操作符详解_第6张图片

 你知道其中的奥秘吗?

你可能感兴趣的:(学习,c语言,操作符)