负数的二进制形式


在学习位运算时,对负数右移让我瞬间就困惑了,对负数的二进制形式都不清楚,本来这是前几天就学习过了的,但我对知识缺乏良好的总结,先将从>>而引起的一系列问题一一解决:

负数的二进制

-15>>3这个表达式的值
首先我们要知道15的二进制(32位)表示为:
0000 0000 0000 0000 0000 0000 0000 1111
-15=~(0000 0000 0000 0000 0000 0000 0000 1111)+1
而按位非~运算符:
按位非运算符“~”是单目运算符。 其功能是将操作数中的二进制位0变成1,1变成0

so
-15=1111 1111 1111 1111 1111 1111 1111 0001
用16进制:0xfffffff1
这样再将-15右移3位就得到了表达式的值fffffffe,即-2

这里可能有点懵,这里得到的是一个16进制,既然正数转换成负数的二进制公式:
负数的二进制形式=~(对应正数的二进制形式)+1

,那反过来我们得到一个负数的二进制形式,将其转换成正数就知道其10进制了,这里为了方便起见,就看后四位
e=14(从a开始为10)
~(1110)+1=0001+1=0010=2
所以就是-2啦,
其实上述牵扯到一个原码,反码,补码的问题,在计算机中,负数以其正值的补码形式表达.这样我就能更好理解这公式的含义了(大一下期学了数字逻辑第一章的内容)

以下内容纯属萌新看法

最高位对应的位为符号位
这句话开始我觉的挺对的,但我想到什么整型的无符号,有符号的,首先得有符号才行吧
当我在一个博客下看到别人评论四位二进制的取值范围为(-8~7)

一开始我站在有符号的情况下去考虑,
1111表达的是-1不是15(二进制形式和二进制数是不一样的,这里是二进制形式)
-8=~(1000)+1=1000
而1001是-7,so最小只能取到-8
7=~(1001)+1=0111最大只能取到7

这样理解是没错,但如果无符号的话取值范围就是0~15了
从这里我也就知道了int范围的由来,之前一直没弄其缘由.
unsigned int和int占的字节长度都是4

第一次写博客,代码啥的都不会搞,之后再好好研究,还有格式啥的都有点乱,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值