无符号与有符号整数 原码、反码、补码

无符号与有符号整数

有符号整数和无符号整数的区别在于怎么解释整数的最高位。
无符号整数:其最高位被c编译器解释为数据位;
有符号整数:其最高位被c编译器解释为符号位;
符号位为0 ,则为正;为1,则为负。
对字节数相同的整型数而言,由于有符号整数的数据位比无符号整数的数据位少了1位,而且少的刚好是最高位,因此有符号整数能表示的最大整数的绝对值只有最大无符号整数的一半。

范围:
无符号整数:0-65535
有符号整数:-32768-32767

原码、反码、补码:(举例-1)
原码
|1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1|
反码(符号位不变)
|1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 |
补码(+1)
|1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1|
(假设分配了两个字节的空间)

若为正数:原码,反码,补码相同。。

计算机运用补码可以用于减法的计算 如7-6=7+(-6)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个输出整数原码反码补码的例子: ```python num = -18 bits = num.bit_length() + 1 print("原码:", bin(num & ((1 << bits) - 1))) print("反码:", bin(num & ((1 << bits) - 1) ^ ((1 << bits) - 1))) print("补码:", bin(num & ((1 << bits) - 1) ^ ((1 << bits) - 1) - 1)) ``` 输出结果为: ``` 原码: -0b10010 反码: -0b10011 补码: -0b10010 ``` 其中,`num.bit_length()`用于获取`num`的二进制表示的位数,`bits`为二进制表示的位数加1,`1 << bits`为一个二进制数,其最高位为1,其余位为0,表示一个比`num`的二进制表示的位数多1的二进制数。`((1 << bits) - 1)`为一个二进制数,其所有位都为1,表示一个比`num`的二进制表示的位数多1的全1二进制数。`num & ((1 << bits) - 1)`用于将`num`的二进制表示截取为`bits`位,即去掉多余的高位。`((1 << bits) - 1) ^ ((1 << bits) - 1)`为一个二进制数,其所有位都为0,表示一个比`num`的二进制表示的位数多1的全0二进制数。`num & ((1 << bits) - 1) ^ ((1 << bits) - 1)`用于将`num`的二进制表示的符号位取反,即将其变为反码。`((1 << bits) - 1) ^ ((1 << bits) - 1) - 1`为一个二进制数,其最高位为0,其余位为1,表示一个比`num`的二进制表示的位数多1的全1二进制数减1,即一个比`num`的二进制表示的位数多1的全1二进制数的补码。`num & ((1 << bits) - 1) ^ ((1 << bits) - 1) - 1`用于将`num`的二进制表示的符号位取反并加1,即将其变为补码

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值