• Share on Google+
补养码与位运算
admin 2018-10-10

  参加以位运算的数字邑是二进制补养码的方法终止按位与、或、异或,因此先说说二进制:原码、反码、补养码。

  在C言语中,原码、反码、补养码邑是拥有标记定点数的体即兴方法。壹个拥有标记定点数的最高位为标记位,0是正,1是负,下面壹致以8位的整顿数为例伸见此雕刻几种码:

  原码:

  假设机具字长为n,这么壹个数的原码坚硬是用壹个n位的二进制数,就中最高位为标记位:正数为0,正数为1。剩的n-1位体即兴概数的对立值。

  比如: X=+101011 , [X]原=00101011 X=-101011 , [X]原=10101011

  位数不够的用0补养全。

  PS:正数的原、反、补养码邑壹样:0的原码跟反码邑拥有两个,鉴于此雕刻边0被分为+0和-0。

  反码:

  正数的反码与其原码相反;正数的反码是对其原码逐位取反,但标记位摒除外面。

  比如:X=-101011 , [X]原=10101011 ,[X]反=11010100

  补养码:

  正数的补养码与其原码相反;正数的补养码是在其反码的下座加以1

  比如:X=-101011 , [X]原=10101011 ,[X]反=11010100,[X]补养=11010101

  PS:0的补养码是独壹的,假设机具字长为8这么[0]补养=00000000。

  壹个数和它的补养码是却叛逆的。

  移码:

  无论正正数,将其补养码的标记位取反即却。

  比如:X=-101011 , [X]原=10101011 ,[X]反=11010100,[X]补养=11010101,[X]移=01010101

  因此我们却见,此雕刻几种码的相干是:原码->反码->补养码->移码

  下面骈杂伸见下几种位运算,邑迥然不一,剩意他们的运用才是重心:

  按位与运算 按位与运算符”&”是副目运算符。其干用是参加以运算的两数各对应的二进位相与。条要对应的两个二进位均为1时,结实位才为1 ,不然为0。参加以运算的数以补养码方法出产即兴。

  按位与运算畅通日用到来对某些位清0或管某些位。比如把a 的高八位清 0 , 管低八位, 却干 a&255 运算 ( 255 的二进制数为0000000011111111)。

  用法:

  a. 清洞特定位 (mask中特定位置0,其它位为1,s=s&mask)

  b. 取某数中指定位 (mask中特定位置1,其它位为0,s=s&mask)

  按位或运算 按位或运算符“|”是副目运算符。其干用是参加以运算的两数各对应的二进位相或。条需对应的二个二进位拥有壹个为1时,结实位就为1。参加以运算的两个数均以补养码出产即兴。

  运用:日用到来将源操干数某些位置1,其它位不变。

  按位异或运算 按位异或运算符“^”是副目运算符。其干用是参加以运算的两数各对应的二进位相异或,当两对应的二进位相来日,结实为1。参加以运算数仍以补养码出产即兴。

分享文章轻松赚奖金!
将连结分享文章给好友或是贴至论坛、社群网站上,只要有人点击你分享的文章连结,就可以赚点击奖金,最棒的是,你还有机会可以再赚到一笔可观的【成交奖金】
分享你的专属连结,让生活更美好!