2021-09-15通过汇编重新认识C语言(第3次更新)

3.数据类型

整数类型

整数数据包括:
    int 4字节 0~0xFFFFFFFF
    long 4字节 0~0xFFFFFFFF
    short 2字节 0~0xFFFF
    char 1字节 0~0xFF

当前面的int、long、short、char、这些被称为关键字,同时这些关键字会规定你所要声明的数据的宽度(空间大小),所以当你所输入的数据大于你所规定的数据宽度,这部分数据就会溢出,那么程序会对这个溢出的数据做出怎样的操作呢?

实验如下:

//定义一个char类型的数据,赋值一个超出其数据宽度的值,看输出多少
int main(){
	unsigned char x=0xff;
	printf("%x %d\n",x,x);
	x=0xff1;
	printf("%x %d\n",x,x);
	x=0x1ff;
	printf("%x %d\n",x,x);
	return 0;
}

在这里插入图片描述

结果只有1,3行两个输出的结果相同,可以看出,当输入的内容大于了改数据的宽度时,程序会将数据以16进制的进行高位删除的,最后结果保留,溢出几位就删除几位高位同时保留几位低位。


补充一下,数据就是以二进制机械码的形式的存在与计算机中,而二进制对于我们来说太繁琐,一个内存单元就可以存储8位二进制,而在汇编中,通常将这些二进制转化16进制,相当于为每一个4位的二进制进行取名,方便人们识别。
    

在这里插入图片描述

原码、反码和补码
原码就是直接将该数据以二进制的转化出来的二进制机械码;
反码就是就是令符号位不变,其余位取反(符号位就是二进制中的最前面的那位)
补码就是在反码的基础上+1

我们知道在计算机中,数据是以二进制的形式存储的,但是上面这个表中只表示了正数,那负数呢?于是前人们的智慧就彰显出来了,将数据分为无符号(unsigned)和有符号(signed)两种形式,并规定通过不同的规则表达该数据是无符号还是有符号。

==无符号==就是其身的原码,同时其补码,反码,还有原码都是一样的。
==有符号==取其补码。其原码的符号位根据正数为0,负数为1的规则进行编写,然后符号位不变其余位取反,最后+1得到其补码,也就这个数的机械码。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值