suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Der Novizenonkel ist wieder hier, um um Rat zu fragen.

Ich habe ein einfaches Verständnis der Konzepte von Originalcode, Umkehrcode und Komplementcode

Aber wenn ich auf das bitweise „UND, ODER, NICHT“ stoße, explodiere ich fast auf der Stelle~

Wenn ich auf die Linksverschiebung stoße und Rechtsverschiebung, ich mache es einfach. Es ist wie ein Haufen Haare~~~

Kann jemand eine kurze Zusammenfassung geben?


本善之初本善之初1914 Tage vor1437

Antworte allen(2)Ich werde antworten

  • jesse

    jesse2019-09-19 13:20:03

    这些只是开胃小菜,切不可当成拦路虎,锱铢必较,降低你学习PHP的兴趣啊,小知识点不懂得可先跳过,等用到的时候在结合实际情况考虑。

    Antwort
    0
  • 王林

    王林2019-08-26 17:42:04

    逻辑与、逻辑或、逻辑非是对boolean值得操作,属于离散数学范畴。
    按位与、按位或、按位非是对计算机位的操作,属于计算机二进制位运算范畴。
    逻辑与 都是真才真 c中区分&、&&的区别。
    逻辑或 有真就是真 c中区分|、||的区别。
    逻辑非 假才真 c中为!。
    按位与、按位或、按位非按照上面的规则对每一位进行逻辑运算,其中1代表真0代表假。

     按位与操作 0&0=0; 0&1=0; 1&0=0; 1&1=1

    例子:10&9: 0000 1010 & 0000 1001 = 0000 1000 = 8

    负数按补码形式参加按位与运算

    “与运算”的特殊用途:

    (1)清零。如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。

    (2)取一个数中指定位

    方法:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中的指定位。

    例:设X=10101110,

    取X的低4位,用 X & 0000 1111 = 0000 1110 即可得到;

    还可用来取X的2、4、6位。

    按位或运算符(|)

    参加运算的两个对象,按二进制位进行“或”运算。

    运算规则:0|0=0; 0|1=1; 1|0=1; 1|1=1;

    即 :参加运算的两个对象只要有一个为1,其值为1。

    例如:3|5 即 0000 0011 | 0000 0101 = 0000 0111 因此,3|5的值得7。

    另,负数按补码形式参加按位或运算。

    “或运算”特殊作用:

    常用来对一个数据的某些位置1。

    方法:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。

    例:将X=10100000的低4位置1 ,用 X | 0000 1111 = 1010 1111即可得到。

    异或运算符(^)

    参加运算的两个数据,按二进制位进行“异或”运算。

    运算规则:0^0=0; 0^1=1; 1^0=1; 1^1=0;

    即:参加运算的两个对象,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

    例如:10^-9 即 0000 1010 ^ 1111 0111 = 1111 1101(补码) 原码即为1000 0011 即10^-9 = -3

    “异或运算”的特殊作用:

    (1)使特定位翻转 找一个数,对应X要翻转的各位,该数的对应位为1,其余位为零,此数与X对应位异或即可。

    例:X=10101110,使X低4位翻转,用X ^ 0000 1111 = 1010 0001即可得到。

    (2)与0相异或,保留原值 ,X ^ 0000 0000 = 1010 1110。

    交换a和b

    方法一         方法二

    1.a=a^b    1.a= a-b    

    2.b=b^a    2.b= a+b    

    3.a=a^b    3.a= b-a    

     左移运算符(<<)

    将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

    例:a = a << 2 将a的二进制位左移2位,右补0,

    左移1位后a = a * 2;

    若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

    6. 右移运算符(>>)

    将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

    操作数每右移一位,相当于该数除以2。

    例如:a = a >> 2 将a的二进制位右移2位,

    左补0 or 补1 得看被移数是正还是负。

    >> 运算符把 expression1 的所有位向右移 expression2 指定的位数。expression1 的符号位被用来填充右移后左边空出来的位。向右移出的位被丢弃。

    例如,下面的代码被求值后,temp 的值是 -4:

    var temp = -14 >> 2

    -14 (即二进制的 11110010)右移两位等于 -4 (即二进制的 11111100)。

    无符号右移运算符(>>>)

    >>> 运算符把 expression1 的各个位向右移 expression2 指定的位数。右移后左边空出的位用零来填充。移出右边的位被丢弃。



    Antwort
    0
  • StornierenAntwort