int and long

int和long作为基本的整数类型,取值范围和位数直接相关。如果是n位整数的话,最高位表示符号位,剩下的n-1位以补码形式表示绝对值,因此范围是整数区间[-2^(n-1),2^(n-1))。
int和long并没有明确位数,具体和平台相关(有一点可以确定,sizeof(int)<=sizeof(long))。一般而言,32位机的int是32位的,于是范围是[-2^31, 2^31)也就是[-2147483648, -2147483648)。而非int的位数取决于机器字长外还决定于软件平台(操作系统、编译器)上实现的特定的C语言数据模型(专指整数数据模型,不是数据库里讨论的那个),只是一般32位平台上的long都比较统一(基本上都是LP32),为32位,范围和int一致。(如果是64位平台,除了Windows上的LLP64模型中long是32位外,LP64、ILP64、SILP64的long都是64位)。
另外LS错误。首先用的无符号整数写法是错误的,其次printf使用不当(应该用字长无关的%i保证结果正确),再次结果意义不明确。
unsigned int i= -1;
unsigned long l = -1;
printf("%i %i", i, l);
-1转换为无符号数后表示负数的符号位“1”被作为最高非符号位,输出的是无符号整数的最大值。
printf("%i %i", i >> 1, l >> 1);
输出有符号整数最大值,该值加1再乘以-1后即得有符号整数最小值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值