二进制补码和原码的记录

虽然计算机内部是以补码的形式进行存储,但是我们运算到的是原码,看到的也是原码。

所以在进行负数的二进制的运算的时候,需要注意!

一个字节8位,即可表示2^8 =256,有符号数那就可以表示2^7 =128个正数、2^7 =128个负数了,=表示[-128, 127]。

在计算机中数据用补码表示,利用补码统一了符号位与数值位的运算,同时解决了+0、-0问题,将空出来的二进制原码1000 0000表示为-128,这也符合自身逻辑意义的完整性。因此八位二进制数表示范围为-128~+127。
补码等于反码加1,所以1000 0000是-128
无符号就是[0, 255]
八位: 如果包含符号位:只能表示1+2+4+8+…+64 = 127 就是-128到127.

整数的话是4个字节,那么就是 -231 ---- 231-1
为什么有一个符号位还可以是231呢,虽然是从0开始,但是其实,230+229…+20 = 2**31-1
注意如果都是1的情况下,第i位是0-i-1位的和+1,只要加了1就进了一位。

0X是16进制 -
MAX = 0x7FFFFFFF
MIN = 0x80000000 ----这个其实就是代表最小的,

在这里插入图片描述

异或的运算

计算机内部存储的只有补码。
异或运算和加减运算的都是补码
-5^4=-1
5^4=1
-5 原码: 1000 0101 补码 1111 1011
4 原码: 0000 0100 补码 0000 0100
异或: 原码 1000 0001 — -1
补码 1111 1111 转化为原码就是(减1再取反)1000 0001
故上述是相等的

整除的运算

5 // 2 = -3(这么想,5/2=2.5,整除取整就是2,往小取;但是-5/2=-2.5,-2.5>-3,所以取-3)
像取余和整除这类的运算,负数的做法出来的结果都与我们正常的不一样
做法:
-5 原码 1000 0101 补码 1111 1011 右移一位: 1111 1101
原码就是 1000 0011 也就是-3

-5 % 2 = 1

取余数

a % b == a - a//bb
8 % 3 = 8 - 8//3
3 = 8 - 23 = 2
8 % -3 = 8 - 8//(-3)
(-3) = 8 - (-3)*(-3) = -1
8 // (-3) = -2.6 == -3

1.正数的原码=反码=补码
2.负数(以-1为例)
1000 0001 =》原码,高位的1代表符号位,表示负数
1111 1110 =》反码,符号位不变,其余位按位取反
1111 1111 =》补码,在原码的基础上,符号位不变,其余位按位取反后+1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值