原码,反码,补码

原码,反码,补码:

最高位当做符号位:0表示正数 1表示负数

无符号整数:

按权展开相加

有符号整数:

  • 1.正数:
    10: 0000 1010
    原码 = 反码 = 补码 = 1010
  • 2.负数:
    1.将其绝对值按位取反,得到反码
    2.对反码+1得到补码

例:
10 : 0000 1010
~10: 1111 0101
-10 : 1111 0110


-12 : 0000 1100 —— 1111 0011 —— 1111 0100
-13 : 0000 1101 —— 1111 0010 —— 1111 0011


127: 0111 1111 = 128-1 = 1000 0000 - 1
-128: 1000 0000 —— 0111 1111 —— 1000 0000


-1: 0000 0001 —— 1111 1110 —— 1111 1111
-1+1: 1111 1111+1 —— 10000 0000 —— 0000 0000

char a = -1;//-1
char b = 255;//-1,char默认有符号,取值范围-128~127
unsigned char c = -1;//255,无符号,取值范围0~255
unsigned char d = 255;//255

int e = a;//-1,有符号,取值范围-2^31~2^31-1
int f = b;//-1
int h = c;//255
int i = d;//255

unsigned int j = a;//42……,无符号,取值范围0~2^32-1
unsigned int k = b;//42……
unsigned int x = c;//255
unsigned int y = d;//255

printf("%d\n");

char -1:1111 1111
int -1:111……1111 1111(32个1) = -1


unsigned int -1:绝对值取反加1
(4 * 8 位 = 32 位)
1= 0 0 0 …… 0 0 1(31个0)
取反 = 1 1 1 …… 1 1 0(31个1)
加1= 1 1 1…… 1 1 1(32个1) = 232 - 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值