分析2个代码片段(数值范围,类型转换相关)
2015-05-15 12:35
435 查看
测试环境:VC6.0
![](http://img.blog.csdn.net/20150515123243589?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE4MzI0NjI1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
//unsigned short转换为int类型来运算 所以index-1=-1 也就是0xffffffff
//i<index-1 那么0 < -1 不满足条件,跳出循环(猜想在比较的时候i也会发生类型转换)
//这会发生隐含类型转换
//int转换为unsigned long类型来运算 所以index-1=0xffffffff 被解析为无符号数4294967295
//i<index-1 unsigned short的取值范围[0,65535],而index-1=0xffffffff=4294967295
//i一直加,加到63335还是小于4294967295,然后再加1,那么就会得到i=0,这个循环就无法跳出来
//unsigned short i = 65535; 65535=1111 1111 1111 1111
//i = i + 1 65535+1 = 1111 1111 1111 1111 + 1 = 1 0000 0000 0000 0000
//因为unsigned short只占2个字节,那么只会取后面的2个字节作为数值也就是0
#include <stdio.h> int main(void) { unsigned short index = 0; unsigned short i = 0; printf("%x\n",index-1); for(i=0;i<index-1;i++) printf("%d\n",i); }//对于short无符号数index=0, index-1因为1是有符号int类型,这会发生隐含类型转换
//unsigned short转换为int类型来运算 所以index-1=-1 也就是0xffffffff
//i<index-1 那么0 < -1 不满足条件,跳出循环(猜想在比较的时候i也会发生类型转换)
#include <stdio.h> int main(void) { unsigned long index = 0; unsigned short i = 0; //sizeof(unsigned long) 为4字节 printf("%x\n",index-1); for(i=0;i<index-1;i++) printf("%d\n",i); }//对于long无符号数index=0, index-1因为1是有符号int类型,而index是unsigned long,
//这会发生隐含类型转换
//int转换为unsigned long类型来运算 所以index-1=0xffffffff 被解析为无符号数4294967295
//i<index-1 unsigned short的取值范围[0,65535],而index-1=0xffffffff=4294967295
//i一直加,加到63335还是小于4294967295,然后再加1,那么就会得到i=0,这个循环就无法跳出来
//unsigned short i = 65535; 65535=1111 1111 1111 1111
//i = i + 1 65535+1 = 1111 1111 1111 1111 + 1 = 1 0000 0000 0000 0000
//因为unsigned short只占2个字节,那么只会取后面的2个字节作为数值也就是0
相关文章推荐
- 【Android代码片段之一】图片处理Bitmap相关类型转换
- 代码片段——泛型类型转换
- android 开发中将十六进制 颜色代码 转换为int类型数值 方法 :
- android十六进制颜色代码转换为int类型数值
- android 开发中将十六进制 颜色代码 转换为int类型数值
- Char类型数值超出范围,导致程序陷入死循环深入分析
- 字符串转换数值类型异常分析
- 代码分析将double类型的浮点数转换成二进制-实例
- Lucene 学习之二:数值类型的索引和范围查询分析
- Android中将十六进制 颜色代码 转换为int类型数值
- 【C语言复习(六)】隐式类型转换相关分析
- GstBin和sink组件的状态转换代码分析和相关逻辑
- 相关数值分析多种算法代码
- java基本类型取值范围及相关类型转换
- java基本类型取值范围及相关类型转换
- java基本类型取值范围及相关类型转换
- opencv中Mat类型操作或转换代码分析
- 【C语言复习(六)】隐式类型转换相关分析
- JavaSE7基础 强制转换 int->byte(int变量的数值在byte类型范围内)
- POCO C++库学习和分析 -- 数据类型转换