数据的存储小练习

本文深入探讨了C语言中char类型在存储负值和正值时的细节,包括补码、反码和原码的转换,以及打印时的整型提升现象。通过示例代码解释了-1、-128、128在char类型中的表现,以及它们在转换为无符号整型打印时的结果。文章揭示了类型转换和截断对数值的影响,对于理解C语言底层数据处理有重要帮助。
摘要由CSDN通过智能技术生成

1、 

//1.
//输出什么?
#include <stdio.h>
int main()
{
    char a= -1;
    signed char b=-1;
    unsigned char c=-1;
    printf("a=%d,b=%d,c=%d",a,b,c);
    return 0; }

大多数编译器默认char类型默认为signed char ,

-1的原码100000000000000000000000000001

-1的反码1111111111111111111111111111111110

-1的补码1111111111111111111111111111111111

吧-1放在char类型的a中,因为char类型只有1个字节所以会发生整形截断。也就是存入a,b,c的是

11111111

在打印时打印的是有符号的整形,发生整形提升。整型提升时,有符号类型的补符号位,无符号类型补充0。

所以发生整型提升后的a,b,c分别是

a  11111111111111111111111111111111

b  11111111111111111111111111111111

c   00000000000000000000000011111111

 因为a,b的符号位是1所以求得a,b为-1,c的符号位是0,c为255。

2、

#include <stdio.h>
int main()
{
    char a = -128;
    printf("%u\n",a);
    return 0; }

 -128  10000000000000000000000010000000

反码  11111111111111111111111101111111

补码  11111111111111111111111110000000

存入a中发生整形截断。

a  10000000

 a是有符号数,打印a时发生整型提升补符号位1

11111111111111111111111110000000

 因为打印的是无符号数,所以原反补相同。

打印结果的二进制形式也就是这样结果为:4294967168

3、

#include <stdio.h>
int main()
{
    char a = 128;
    printf("%u\n",a);
    return 0; }

与上题相似

128  00000000000000000000000010000000

反码  01111111111111111111111101111111

补码  01111111111111111111111110000000

存入a中发生整形截断

10000000 

 后面的与上题相同。

4、

int i= -20;
unsigned  int  j = 10;
printf("%d\n", i+j); 
//按照补码的形式进行运算,最后格式化成为有符号整数

 -20 10000000000000000000000000010100

反:11111111111111111111111111101011

补:11111111111111111111111111101100

10  00000000000000000000000000001010

反:11111111111111111111111111110101

补:11111111111111111111111111110110

补码 i+j:11111111111111111111111111110100

 因为符号位是1,所以说转化为原码就是-10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东莞呵呵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值