- 反码:除符号位外,逐位取反。
- 补码:反码+1,符号位也参与运算。
正式运算中,符号位也参与运算的。 - -128用9位表示为1 1000 0000,而char只有8位,截断了一位,故用1000 0000(-0)来表示-128。但实际上计算-128时,应加一位的。
有了证明
unsigned char c=-1; printf("%d",c);
输出为255。
佐证了-1先是作为char的符号数转为补码1111 1111,之后被识别为无符号数,为正数,再转换为原码1111 1111 输出255.
unsigned char c=-8; printf("%d",c);
输出为248。
佐证了上面的猜想。10001000先是作为有符号数,转为补码11111000,之后被识别为无符号数,为正数,再转为原码1111 1000,输出248.
unsigned char c=-128; printf("%d",c);
输出为128。
这是因为补了一位,为1 1000 0000,反码为1 0111 1111,补码为1 1000 0000,为无符号数,符号位被丢弃,为正数,转原码为1000 0000,输出128.
网友评论