关于计算机中的原码,反码和补码

写这个的主要原因是为了总结(主要是对于IDE来说):
首先计算机为了解决用原码或反码运算时所带来的不变,引入补码来进行计算机中的基本运算.

比如对于C语言中的一个int变量一般占4字节,也就是32bits,对应着计算机里面的01的位数,而在计算机中为了方便直接让数字按照补码形式存储,也就是说对于1来说在计算机中用00…001存储(0有31个),而-1则用1111…111(32个1)存储.

进一步,对于C语言中用十六进制表示数字时,普通的0xF就表示十进制下15,而对于特殊的0xFFFFFFFF(8个F)则表示-1,为什么呢?因为十六进制数的表示也是与字节相关的,一个0~F的十六进制数可以表示计算机中4位的bits,那么8位的十六进制数就可以表示32位的bits,也就是4字节,又因为int类型变量的32位的bits是由1位符号位和其他31位二进制数表示的,这就解释了为什么int类型最大值为21474836473,因为二进制下加上符号位01111…11(31个1)就表示这么大的数.但是要注意这32位是补码,也就是说当一个十六进制数有8位的时候,就可以表示计算机中存储int类型能表示的任意大小的数了.

比如0xFFFFFFFF表示的就是-1(十六进制代表的补码),而对于普通的0xF并没有达到影响符号位的长度,就依然是一个正常的数字.

学了位运算后(注意都是按位的),就有一个小知识点,对于一个大于等于0的数的补码还是原码本身,而对于负数来说,它的补码也可以用它的正数形式取反加一得到,也就是 -n=(~n)+1,这就在求lowbit的时候有点用处.

衍生出来就是一个数的取反加一就得到这个数的相反数了.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值