整型变量

简介: 整数溢出   如果整数太大,超出了整数类型的范围会怎么样?下面分别将有符号类型和无符号类型整数设置为最大允许值加略大一些的值,看看结果是什么(printf()函数使用%u说明符显示unsigned int类型的值) 1 #include 2 int main() 3 { 4 ...

整数溢出

  如果整数太大,超出了整数类型的范围会怎么样?下面分别将有符号类型和无符号类型整数设置为最大允许值加略大一些的值,看看结果是什么(printf()函数使用%u说明符显示unsigned int类型的值)

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int i = 2147483647;
 5     unsigned int j = 4294967295;
 6 
 7     printf("%d %d %d \n", i, i+1, i+2);
 8     printf("%u %u %u \n", j, j+1, j+2);
 9     while(1);
10     return 0;
11 }

  解释:无符号整型j像一个汽车里程指示表,当达到最大值时,她将溢出到起始点。整数i也是同样原理。它们的主要区别是unsigned int变量j的起点是0,而int类型的起始点是-2147483648.注意到当i超过(溢出)它的最大值时,系统并没有给出提示,所以编程时您必须自己处理这个问题。 

 1 #include <stdio.h>
 2 int main(void)
 3 {
 4         unsigned int un = 3000000000;
 5         short end = 200;
 6         long big=65537;
 7         long long verybig = 12345678909642;
 8 
 9         printf("un = %u and not %d\n", un, un);
10         printf("end=%hd and %d\n", end, end);
11         printf("big=%ld and not %hd\n",big, big);
12         printf("verybig=%lld and not %ld\n", verybig, verybig);
13 
14         return 0;
15 }
16 ~
输出:
  un = 3000000000 and not -1294967296
  end=200 and 200
big=65537 and not 1
  verybig=12345678909642 and not 12345678909642

这个例子表明如果使用了不正确的说明符,会造成意想不到的后果。首先,对无符号变量un使用%d说明符导致显示负值!这是由于在程序运行的系统中,无符号数3000000000和有符号数-129496296在内存中的表示方法是一样(这里可以假设它们在内存中 被表示为A)。所以告诉printf()该数值是无符号的,A将打印成某个值;而如果告诉printf()函数该数值是有符号的,A又将打印另外一个值。

  另:使用printf()语句时,切记每个要显示的值都必须对应自己的格式说明符,并且 显示值的类型  要和 说明符 匹配

 

相关文章
|
7月前
|
存储 C语言 C++
用数组名作函数参数
用数组名作函数参数
41 1
|
7月前
|
C语言
【C语言】求整型变量和浮点型变量的绝对值
【C语言】求整型变量和浮点型变量的绝对值
157 0
|
7月前
|
存储 C语言
指针变量
指针变量
56 2
|
7月前
|
存储 C语言
字符指针变量与字符数组的比较
字符指针变量与字符数组的比较
57 3
|
7月前
|
存储 C语言
字符指针作为函数参数
字符指针作为函数参数
73 2
|
7月前
|
存储 C语言
指针变量作为函数参数
指针变量作为函数参数
60 0
|
7月前
|
存储 C语言
使用数组名作函数参数
使用数组名作函数参数
52 0
|
7月前
|
存储 程序员 C++
使用字符指针变量和字符数组的比较
使用字符指针变量和字符数组的比较
80 1
|
7月前
|
安全 C语言 C++
字符指针做函数参数
字符指针做函数参数
46 1
|
7月前
|
安全 C语言
字符指针作函数参数的深入探索
在C语言编程中,字符指针是一个重要的概念,尤其在处理字符串和文本数据时。当我们将字符指针作为函数参数时,可以实现多种灵活和高效的操作。本文将深入探讨字符指针作为函数参数的应用,并通过代码示例加以说明。
67 1