天天看点

C位级运算基础

无符号数

有符号数,有符号数的最常见的表示方法之一就算补码

补码的 最高有效位是符号位 

正数的补码是本身,负数的补码是本身值每位求反最后加1

二进制的&与(都为真时为真) |或 (一个为真时为真)^异或(有一个为真,但两个不相同时为真) ~取反(真时假,假时真)

-3 的16 进制  首先原码为0011,假如是正数补码等于原码, 负数的求补码,首先计算|-3|的原码,然后再计算反码(就是按二进制位取反),再在反码的基础上加1

正数补码 是本身 ,负数补码是绝对值按位取反码再加1;豁然明朗,

再次总结下  无符号表示,有符号表示(一般最通常用的是补码,或是反码)

w位无符号 取值范围0 ~ 2(w - 1)    1111  8 4 2 1 = 15    2(w) - 1

128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 192 + 56 + 7 = 192 + 63 = 255 = 2(8) - 1 = 16 * 16 = 256 - 1 = 255 

w位 无符号取值范围 2(w) - 1 

w位 有符号取值范围-2(w - 1) ~ 2(w -1) - 1

w = 8

-2(8-1) ~ 2(8-1) - 1 = -2(7) ~ 2(7) - 1  = -128 ~ (128 - 1) = 128 ~ 127

补码,反码 

有符号才反码、补码,反码 + 1 = 补码

有符号的 补码是先通过绝对值的原码 取反再 加 1

再加深下对二进制移位规则的回顾,左移x << k 丢弃最高的k个有效位,在右侧尾部补充k个0

右移x >> k 逻辑移时 在左侧补k个0

算符移位时在左侧补k个移位数的最高有效位.

继续阅读