*欢迎来到博主的专栏C语言进阶指南
博主id:reverie_ly*
C语言将数据分为整数类型和浮点数类型。
int用于声明一个整数类型的变量,我们根据变量的实际应用可以使用short int,long int,long long int。
以我们常用的64位系统为例。int类型占用的数位是32位,其中第一个数位是符号位,符号位中0代表正数,1表示负数。所以一个有符号整型的的值域在(- 2147483648~ 2147483647)
整数类型在不同的系统上可以存储的最大值是不同的。我们可以在<limits.h>这个头文件上看到这些类型被设定的最大值。
(这里可以看出char类型的值域是-128~127,short的值域是-32768-32767)
这里给上不同位数的cpu的整数类型的取值范围
如果这个变量不需要符号位我们则使用unsigned修饰。比如unsigned int,unsigned long int ,unsigned short int。
在使用修改过大小的整数类型(非标准int)时,可以省略int,比如long int可以写成long,unsigned long int可以写成unsigned long。
常量也是具有数据类型的,当我们给出一个常量时,编译器会根据数的大小来根据short int,unsignedint,int,unsigned,long int,unsigned long int,的顺序适配一个整型类型。我们也可以在常量后面加上字母来强制转换常量数据的类型,比如20就是short int类型的常量,用20L就变成了long类型的常量。如果想将这个数变成无符号数,就使用U将这个常量转换成无符号类型。
如果我们这样写,就会发现vs报出这样的错误警告
说明这个有符号整数类型的常量已经转换成无符号整型。
十进制常量:123 456 789
八进制常量:012 038 048(第一个数位一定是0)
十六进制常量:0xffff,0xa10,0x888(一定要有0x)。
%d——int类型十进制数
%u——unsigned int类型十进制数
%o——int类型八进制数
%x——int类型的十六进制数
再写短整型数是,在d,o,u,x前面加上h
在写长整数时,在d,o,u,s前面加上一个l(L小写)。
在c语言中,有符号整型以三种形式存储在内存中,分别为原码,反码,和补码
原码的第一位为符号码,0为正,1为负
反码是原码除符号位外,所有数取反。
补码为原码加1
正数的原反补码一致。如20的存储形式为
00000000 00000000 00000000 00010100
0x00 00 00 41
负数-10的补码形式为
原码:1000000 00000000 0000000 00001100
反码:1111111 11111111 1111111 11110011
补码:1111111 11111111 1111111 11110110
16进制位:0xff ff ff f6
之所以用补码形式的原因为cpu只支持加法运算。这就需要将减法形式换为加法形式,如1-1需要变成1+(-1)那么原码形式的加法
1:00000000 00000000 00000000 00000001
-1:10000000 00000000 00000000 00000001
结果为:10000000 00000000 00000000 00000010
换算成10进制结果为-2,由此可知原码不适合进行减法运算,而将负数化为补码。原式为
1:00000000 00000000 00000000 00000001
-1:11111111 11111111 11111111 11111111
相加结果为0.
根据上述的存储结果我们发现数据并不是顺位存储的。这时候就要引出储存的模式概念
1、大端储存,把数据的高位储存在低地址中,如0x11223344,在内存中的存储形式为11 22 33 44.
2、小端储存,把数据的低位储存在低地址中,如0xfffffff6储存形式为f6 ff ff ff
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。