我试图使用%d格式修饰符读取任意大小的整数scanf().当输入整数具有10个或更少的数字时,此操作将按预期执行.但是,当我尝试输入一个11位或更多位数的数字时,scanf("%d", &number)表现得很奇怪.它似乎返回负值.例如,12345678901读取时,分配的值number也是-539222987.
有没有人知道为什么会这样?也许读取整数的大小有限制scanf("%d", &i)?
谢谢!
在大多数情况下C,int是大致 32位,间这将仅存储号码2147483647和-2147483648.超出限制范围的任何数字都不受支持.
如果你想存储更长的数字,你可以查看long long哪些通常是 64位,并可以存储9223372036854775807和之间-9223372036854775808.
您也可以创建类型,unsigned以便它不会存储负数并将所有值分配给正确的数字.
如果要对数据类型的位数进行绝对控制,可以使用<inttypes.h>.int64_t将为您提供64位的signed值,uint64_t并为您提供64位的unsigned值.
您可以查看大多数数据类型的限制 <limits.h>
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |