C语言数据存储(2)

C语言数据存储(2)

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;
}

解析:
	数据在内存中以二进制补码方式存储,先写出其原码,再根据原码写出补码;
	-1补码:11111111111111111111111111111111
	char类型占1个字节,即8位二进制,末尾数出8位:11111111
	现在以整形形式打印,a是char类型,需要进行整形提升。
	看符号位为1,是负的,整型提升高位补充符号位:11111111111111111111111111111111
	求出的是补码,还需要转为原码,补码取反+1变为原码
	a:10000000000000000000000000000001,所以a打印-1
	b是有符号类型,和a同理,打印出来也是-1
	c是unsigned char ,无符号字节型,整型提升高位补0
	c:00000000000000000000000011111111  打印255

在这里插入图片描述

补充:
C语言中:char是unsigned char 还是 signed char 一般没有规定,但大部分编译器是采用signed char
int 是 signed int
char是unsigned char

2.练习题

#include <stdio.h>
int main()
{
    char a = -128;
    printf("%u\n",a);
    return 0;
}
解析:
%u是以无符号整形打印。
a的原码:10000000000000000000000010000000
         补码:11111111111111111111111110000000
         char类型截取8位:10000000 
         char是有符号char,整型提升高位补符号位:11111111111111111111111110000000
         以无符号类型打印,开头1就不是符号位,就不是负数,补码为原码
         打印4,294,967,168
         
         

在这里插入图片描述

3.练习题

#include <stdio.h>
int main()
{
    char a = 128;
    printf("%u\n",a);
    return 0;
}
解析:
a补码:00000000000000000000000010000000
char类型截取8位:10000000
 char是有符号char,整型提升高位补符号位:11111111111111111111111110000000
 以无符号类型打印,开头1就不是符号位,直接打印:4294967168
 

在这里插入图片描述

4.练习题

int i= -20;
unsigned  int  j = 10;
printf("%d\n", i+j); 
解析:
i的原码:10000000000000000000000000010100
补码:  11111111111111111111111111101100
j补码: 00000000000000000000000000001010
加起来:11111111111111111111111111110101
求原码:10000000000000000000000000001010   -10

在这里插入图片描述

5.练习题

unsigned int i;
for(i = 9; i >= 0; i--)
{
    printf("%u\n",i);
}

解析:
i是无符号字符型,不会小于0,最多等于0,所以会死循环。

在这里插入图片描述

6.练习题

int main()
{
    char a[1000];
    int i;
    for(i=0; i<1000; i++)
   {
        a[i] = -1-i;
   }
    printf("%d",strlen(a));
    return 0;
}

解析:
	a[0]=-1 a[1]=-2 a[2]=-3
	-1 -2 -3 -4.....-127 -128 char范围从-128 ~ 127,-128再往上+1就变为127
	-1 -2 -3 -4.....-127 -128  127 126 125 .... 2 1 0 -1 -2 -3...
	字符串找到\0停止,128+127=255
	

在这里插入图片描述

7.练习题

#include <stdio.h>
unsigned char i = 0;
int main()
{
    for(i = 0;i<=255;i++)
   {
        printf("hello world\n");
   }
    return 0;
}

解析:
unsigned char 的范围是从0-255,255之后还会回到0,所以是死循环。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值