整型变量

简介: 整数溢出   如果整数太大,超出了整数类型的范围会怎么样?下面分别将有符号类型和无符号类型整数设置为最大允许值加略大一些的值,看看结果是什么(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()语句时,切记每个要显示的值都必须对应自己的格式说明符,并且 显示值的类型  要和 说明符 匹配

 

相关文章
|
存储 搜索推荐
小红书InstantID来了, 一张照片几秒钟就能生成个性化图片
【2月更文挑战第24天】小红书InstantID来了, 一张照片几秒钟就能生成个性化图片
544 2
小红书InstantID来了, 一张照片几秒钟就能生成个性化图片
|
XML 前端开发 JavaScript
前端图形学实战: 从零实现编辑器的图层管理面板和实时缩略图(vue3 + vite版)
前端图形学实战: 从零实现编辑器的图层管理面板和实时缩略图(vue3 + vite版)
321 0
|
机器学习/深度学习 人工智能 编解码
【AI系统】MobileFormer
本文介绍了MobileFormer,一种创新的网络结构,通过双线桥将MobileNet的局部特征与Transformer的全局特征相结合,实现了高效且低计算成本的模型设计。MobileFormer使用少量tokens来学习全局先验,从而在保持高性能的同时,显著降低了计算量。通过本文,读者可以深入了解如何有效结合CNN和Transformer的优势,实现模型的轻量化。
240 7
【AI系统】MobileFormer
|
10月前
|
存储 分布式计算 DataWorks
阿里云助力富友数据中台革新,创新引擎赋能商户数字化经营
在电子商务和跨境交易蓬勃发展的背景下,第三方支付行业迎来爆发式增长,但也面临数据量激增、实时性瓶颈、高并发压力及成本效率失衡等挑战。富友支付通过引入MaxCompute、Hologres和DataWorks等技术,重构新一代数据仓库体系,实现高性能、高稳定性和降本增效,助力商户数字化经营,推动支付行业生态的可持续发展。
|
程序员 Windows
程序员必备文件搜索工具 Everything 带安装包!!! 比windows自带的文件搜索快几百倍!!! 超级好用的文件搜索工具,仅几兆,不占内存,打开即用
文章推荐了程序员必备的文件搜索工具Everything,并提供了安装包下载链接,强调其比Windows自带搜索快且占用内存少。
370 0
|
开发者 Python
【Python】已解决:SyntaxError: positional argument follows keyword argument
【Python】已解决:SyntaxError: positional argument follows keyword argument
860 0
|
JavaScript
Vue 组件封装 | 给汉字注音(带声调),内含汉字转拼音(带声调/不带声调),获取汉字首字母的方法
Vue 组件封装 | 给汉字注音(带声调),内含汉字转拼音(带声调/不带声调),获取汉字首字母的方法
404 0
|
数据采集 数据可视化 测试技术
五台山风景区旅游模拟漫游系统的设计与实现_kaic
五台山风景区旅游模拟漫游系统的设计与实现_kaic
|
JavaScript 前端开发 Linux
Visual Studio Code搭建C++开发环境
本文以图文并茂的方式介绍如何在Visual Studio Code上快速搭建C++开发环境。
1369 1
Visual Studio Code搭建C++开发环境