关于二进制的表示,左移,运算的相关知识

二进制的表示

二进制转换成十进制对运算方法 就是数值x 位权,对于二进制来说 位权就是2的n次幂(n是索引数),也就是对应索引位置的数值x 2的索引数 次幂。

为什么要用这样的转换方法呢?知其然要知其所以然:

对于十进制的39来说 是9个1和3个10相加,用数值x位权 这样的公式表达就是 对应索引位置的数值x 10的索引数 次幂。

可以看到不变的是索引位置对数值,变得是 不同的进制数 因此对应的位权也不同(位权等于 进制数的 索引数 次幂)

因此对于16进制来说就是16的0次幂,16的1次幂,16的2次幂,可以看到能够表达的数字非常大!这也是为什么地址空间要用十六进制来表达,因为对于同样的数字 十六进制占用的字节更少空间更少

二进制数的值转换成十进制数的值,只需将二进制数的各数位的值和位权相乘,然后将相乘的结果相加即可

什么是左移

左移 位数 可以理解为 扩大为原来的 进制数的 位数 次方 倍,比如二进制数左移一位是 扩大为原来的 2的1次方倍 也就是两倍,左移两位就是扩大为原来的2的2次方倍也就是四倍。

在对比十进制数,10左移1位 就是100也就是10的1次方倍,左移两位也就是10的2次方倍也就是100。

对照着十进制去理解二进制就会非常简单而且容易理解

十进制数左移后会变成原来的10倍、100倍、1000倍……同样,二进制数左移后就会变成原来的2倍、4倍、8倍……反之,二进制数右移后则会变成原来的1/2、1/4、1/8……这样一来,大家应该能够理解为什么移位运算能代替乘法运算和除法运算了吧。

什么是补数

首先什么是补数:就是 和原来的数 加起来等于0 的数就是 补数 ,如何计算补数就是 原数 取反再加上1****

补数既可以代表正数也可以代表负数(最高位是0代表正数,1代表负数)因为正数的补数就是负数,负数的补数就是正数。负数和正数 之间就可以通过补数这种机制计算出来

在二进制世界中只有正数没有负数,因此如果是一个负数的话 需要先把他转为正数 才能知道他是哪个数的负数(比如-3在二进制数的最高位是1,所以就要取补数 就是3然后就可以知道 这个数是-3)

为什么需要补数?

再然后 解释 为什么需要补数,补数是用来干嘛的?

上面说过补数就是和自身相加等于0的数, 那么对于减法来说 减去一个数就是等于加上这个数的补数(比如10-3就是 10+ -3)

比如10-3 就是 把3的二进制 补数 (对于十进制来说就是-3)计算出来 然后加上10的二进制 (就是10+ -3)结果就是 7(因为最高位就是0代表正数 ); 如果是 3-10 那么就是3的二进制数加上 10得二进制补数 ,发现结果的最高位是1,,因此需要进行一次补码的转换也就是7,所以结果就是-7。

计算机如何区分正数和负数?

那么 计算机该如何区分什么时候高位的1和0是代表负数正数需要进行对应的补码(负数需要通过补码来得知 是负多少),什么时候是代表正常的值呢?(这里的值是只的高位的数值是按照 数值x位权来计算)?

答案是通过数据类型,数据类型可以设定数据的取值范围。

在c语言中 unsigned short是可以表达负数的数据类型,而short数据类型就不可以(分别对应上面两种情况)

只要带了unsigned 前缀的数据类型都可以表示 负数 其运算法则和表达法则都会和普通的 数据类型不一样

(如果做高位是 正数就是按照原来的位权x数值表示,但是如果是负数 就需要先转换成正数 比如-10 的二进制数先用 补码 计算出来是其正数是2进制的10,又因为高位是1所以是-10)。


由于数值的最高位 被占用 用来表达正负数,因此能够表示的数值范围也被缩小了(缩小为了一半)。


对于1个字节的二进制来说 能表达0-255个数值,但是对于可以表示负数的数据类型来说 只能表达-128~127中间的数值,因为0也代表正数所以负数比正数多一个数值

与此同时也希望大家能够牢记“将二进制数的值取反后加1的结果,和原来的值相加,结果为0”这一法则。首先,大家可以用1和-1的二进制形式,来彻底地了解补数的相关内容。除了1+ (- 1)之外,2+ (- 2)、39+ (- 39)等同样如此。总之,要想使结果为0,就必须通过补数来实现。

二进制的运算

首先 运算分别对应两种情况:算数运算和逻辑运算 (算数运算指的是加减乘除运算法则,逻辑运算指的是 逻辑门里面的运算比如与,非,与或非,异或非),也有 左移和右移两种运算方法。

对于 左移来说 不管是算数还是逻辑运算,地位要补充的值都是0 (因为地位不涉及正负数)

但是 对于右移来说 如果是 逻辑运算 高位要补充的值 和左移一样 补充0就可以 ,但是要是 算数运算高位要补充的值 需要和原来 的高位符号位一致(保留负数)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值