关于C语言中的unsigned和signed内存存储

        谢谢,各位来看我的博客.今天我们要讨论的是什么了对了就是我们unsigned和signed在我们呢内存中到底是怎么要来存储的

<span style="font-size:20px;">#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include<string.h>
int main(int argc, char *argv[])
{
        //定义了一个有符号的变量
	 char name = 255;
        //定义一个无符号的变量并把有整型付给了有整型而且是往比自己高的字节中
	unsigned int Pava = name;
        //定义了一个短整型,
	short Kava = name;
	printf("%d\n%d\n",Pava,Kava);
}</span>


运行结果如下:

 

 

       大家可定都在想为什么会出现这杨一个结果了,计算机出现这样的结果肯定有一定原因的,就让我们一起来探讨这样的一样种种原因吧,到了这里我们就得好好想想这个于什么有关那一定是于我们计算机存储的有关吧,我们要时刻记住计算机永远就只认识01,也就是二进制。

   同理你们知道255在计算机里面用二进制是怎么表示的吗,(2的8次方-1)=100000000-1=11111111;我们这里用他的补码的出10000001第一位是符号位(1为负数,0为整数)不知道大家还发现有什么问题没有,char是在内存中只占用1个字节,二int是四个字节和short占用了两个字节的。一个字节有八位,那两个那int是四个字节那就32位了,那我们想想32位而char里面则是11111111八位的他辅助给了int那可能里面还要用什么来填充剩下的24位了,这里我们就得分析一下了,是用0来填充,还是用1了。在这里我们就来看看下面就是我画的草图

      

#include <stdlib.h>
#include <malloc.h>
#include<string.h>
#include<stdio.h>
int main(int argc, char *argv[])
{
	//定义了一个有符号的变量
	unsigned char name = 255;
	//定义一个无符号的变量并把有整型付给了有整型而且是往比自己高的字节中
	unsigned int Pava = name;
	//定义了一个短整型,
	short Kava = name;
	printf("%d\n%d\n", Pava, Kava);
}


     大家看到这里,不知道看到没有这两段代码,就只有一个不一样的地方。那就是一个事先声明的是有符号的变量在赋值给了其他的两个的,然而后面得则赋值的无字符的,那当然得出一个结论,我们的无字符声明比转换为比起更高的符号位的时候是以0来填充的。所以才会输出255原本的值,但是你不能超出0~256准确来说266都是不可以的因为266转换为二进制的话100000000也就是输出如下:

      

    就如这张图一样,我们的(unisgned)无符号变量转换比自己更高的字节是以0来填充前面的位,而相反的是signed(有符号)是以1来填充所却的位。当然给他家提醒一下系统默认是signed(有符号)定义的。

                                                                                                                                                            Thank You 大家看我的博客,才刚刚写。后期还有很多关于底层c编程                                                                                                                                                                                                                                              的知识和大家分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值