原码 反码 补码 位运算

 http://blog.youkuaiyun.com/LM165678/article/details/77030806       关于C中为何一个字节表示有符号数范围是[-128-127]

-0的原码[1000 0000]即是-128的原码[1 1000 0000]被8位截断后的样子。凡是-0的,其表示的负数即是 高位添加1之后表示的负数值。

如:若【1000 0000】表示的是负0,则其实际是【1 1000 0000】所表示的负数,即-128.


【新的收获】 对于有符号的整型,以一个字节为例,0~127【0000 0000 ~ 0111 1111】表示的是它们本身,而128~255【1000 0000 ~ 1111 1111】则表示负数(-128 ~ -1),其对应值如下表所示:

无符号值(相当于计算机中存储的是原码)255254253252......131130129128
有符号值(相当于计算机中存储的是补码)【见解释】-1-2-3-4......-125-126-127-128

 

 

 

  不难发现规律:上下的绝对值之和等于定值。

第二行的补码刚好是相应的无符号值的原码

【解释】将此补码按位取反再加一得到了此负数的绝对值的原码,将最高位换为1即为此负数的原码.一个特例是绝对值的原码最高为已经为1了[即-128的绝对值的原码],此时再高位补上1即为-128的原码


 http://blog.youkuaiyun.com/scythe666/article/details/50184273   char c=128;printf("%d",c);问题   解除疑惑

这里记住一点:计算机中用一个字节表示1000 0000的有符号值就相当于 1 10000 0000,即-128.当用4个字节扩展这个值表示有符号的这个值时,扩展为1 0*  1000 0000,即4字节的-128,然后转换为补码就是计算机中的存储值


 

0,计算机存储负值以补码形式存储。

1,正数的 原码,反码,补码都一样。

2,负数的反码: 负数的反码是其绝对值的原码按位取反; 负数的补码:此负数的反码 +1;

 

例子原码反码补码  
-2100000101111110111111110  
      

 

3, 补码的补码 是原码。由负数的补码按位取反再加一得到的是这个负数的绝对值的原码。由补码推导原码两种方法:1,对此补码求补码,2,此补码 -1然后按位取反(符号位除外)

4,按位非操作的本质:操作数的负值减一。自己推导如下:

  正数:

200000010 11111101 10000010 10000011
 A  B     DC


    ~A=B(负值的补码,也即是计算机存储负值的形式)
    B按位取反(符号位不变) =D(D=-A)
    D+ 1 = C(负值的原码) [实际上是D-1=C]
    即C=D-1=-A-1

  负数:

      

例子原码反码补码按位非 
-210000010111111011111111000000001 
 ABCD 

      负数以补码C的形式存储,按位非即对此补码操作。由补码的补码等于原码=>C按位取反(符号位不变)+1=A。C按位取反(符号位也改变)+1=-A,所以,D=-A-1。

5,左移运算符(<<): 在数值没有溢出的前提下,左移n位,相当于乘以2的n次方。

  这个操作符会将数值的所有位(注意,符号位不会移动,即不会影响操作数的符号位)向左移动指定的位数。向左移后,原数值的右侧会多出空位,左移操作会以0来填充这些空位。例子,2<<5 = 64; -2<<5 = -64;

6,有符号的右移运算符(>>):右移n位,相当于除以2的n次方。

  这个操作符会将数值的所有位(注意,符号位不会移动)向右移动指定的位数。向右移后,原数值的左侧会多出空位(具体位置是在符号位右边,数值位左边),有符号的右移操作会用符号位来填充所有空位

7,无符号的右移(>>>):

  这个操作符会将数值的所有位(包括符号位)都向右移动,左侧空出来的位用0填充。对正数来说,>>>和>>操作符结果相同,但是对于负数来说就不一样了,通常负数的>>>操作结果会是个很大的正数。

8,

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值