详解操作符(上)

一.整数的二进制表示形式(三种)

  • 原码


把一个按照 正负 直接翻译成 二进制 ——这就是 原码

  • 反码


最高位——符号位(~) ~不变 其余位 按位取反【0表示正数 1表示负数】

  • 补码


反码+1 ——就是补码

  1. 整数在内存中的存储是补码(结论)

  1. 整数是存放在整型变量中的 (包括正整数 和 负整数)而一个整型变量是四个字节(32个比特位)因此除了用二进制来表示这个整数外,还需要补齐32个比特位的剩余位数。如下图

举个例子:写出-5的原反补码 如下图

在vs进行调试之后 查看内存地址 (vs为了方便 ——将四个二进制数转换为一个十六进制数)

二.移位操作符

3.左移(<<)操作符的实操与原理

我们把a拿出来 用二进制的形式进行表示

移位后110的二进制值是6 所以打印出来的值就是6 那么b就是6

左移:左边丢弃 右边补0

我们写一个-3 然后向左移动一位

补码转换成原码有以下两种方式:

因为我们能看到的是原码 所以将补码转换成原码之后再将它打印出来

总结:以上是我们左移操作符的详细过程!
  1. 右移(>>)操作符

至于我们采用的是算数右移or逻辑右移 这是取决于编译器的!
如果要看编译器用1 or 2 要用负数来测试
因为正数的符号位是0 如果用正数的话 那么 1 or 2 的符号位就相同
  • 逻辑右移(1)


左边用0来补充 右边丢弃

  • 算数右移(2)


左边是用原来的符号位来补充 右边丢弃

对于 移位运算符 来说 没有移动 负数 的说法 ,比如
因此,只能向左移动 正数 位,或者向右移动 正数 位

三.位操作符

这个“位”是 二进制位
  • 按位与 ( & )

  • 按位或 ( | )

  • 按位异或 ( ^ )

注意:它们的操作数必须是整数!这里是对他们的二进制数进行 “按位与 按位或 按位异或“

1.按位与:对应的二进制位进行按位与 有0 才为 0

总结:-5和3的补码进行按位与 然后赋值给c

2.按位或:有1才为1

3.按位异或:相同为0 不同为1

巧记^的公式:a^a = 0 相同为0
0^a = a
举个例子:3 ^3 ^ 5 = 5

Q :上面这个公式有什么用呢?

A : 它可以通过不创建第三个变量 就可以实现两个数的交换

按位异或 有个好处 :它只会进行 0 or 1的替换 永远不可能变成2 所以它永远不会溢出!

你想要得到一个数的最低位是几 你只需要那这个数去 按位与 (1)00000000000000000000000000000001就可以得到这个数是几

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值