整数在内存中的存储

下面我们来看一组代码

计算机存储时是以补码的形式存储的

-1的原码(以32为例)

1000 0000 0000 0000 0000 0000 0000 0001

存储时补码

1111 1111 1111 1111 1111 1111 1111 1111

Char型大小为一个字节

发生截断即1111 1111

unsigned char signed char char型里储存的都是1111 1111

但在以%d打印是确有所不同,运行结果如图所示         

Signed char类型与char类型打印值相同,这取决于

编译器有的编译器认为char型是无符号的,有的认为

是有符号的,显然在啊哈Cchar是有符号类型的,现在要做的就是区分unsigned charsigned char 有什么区别

Unsigned char类型和signed char类型存储时都是1111 1111

但是在取值时类型不同就产生了差异

我们知道最高位是整数的符号位,而unsigned char类型计算机则认为没有符号位,在打印时以%d打印需要进行提升,当unsigned char提升到int时高位补符号位,而unsigned char没有符号位,所以高位补0即:

0000 0000 0000 0000 0000 0000 1111 1111(补码)

而正数的原,反,补码相同,取出时也是这个值,而1111 1111换算成十进制数就是255

接下来我们再来讨论signed char类型:

同样在以%d打印时需要进行提升,高位补符号位,即补1

此时补码为

1111 1111 1111 1111 1111 1111 1111 1111

换算成原码即

1000 0000 0000 0000 0000 0000 0000 0001

换算成十进制数即为-1。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值