abccd
程序人生,苦中寻乐
博客园
首页
社区
新随笔
联系
订阅
管理
随笔-19 评论-19 文章-17 trackbacks-0
数据升级 int 和 unsigned int
运行下面代码:
#include
<
stdio.h
>
#define
TOTAL_ELEMENTS (sizeof(array)/sizeof(array[0]))
int
array[]
=
{
32
,
33
,
11
,
42
,
43
,
21
}
;
int
main()
{
int
d
=
-
1
;
if
( d
<=
TOTAL_ELEMENTS
-
2
)
printf(
"
d is less than TOTAL_ELEMENTS-2) ;
else
printf(
"
d is NOT than TOTAL_ELEMENTS-2) ;
return
0
;
}
看看运行结果输出是什么?
原因:
C中的整数升级: char, short int 或者int型位段,包括他们的有符号和无符号变型,以及枚举类型,可以使用在需要int 或 unsigned int 的表达式中。如果int能完整表示源类型的所有值,那么该源类型的值就被转换成int,否则转换成unsighed int。
sizeof()返回的是unsigned int, 当 d 与 TOTAL_ELEMENTS - 2 比较时会升级为unsigned int, 因为d是-1就被转成了一个非常大的正数
需将
if
( d
<=
TOTAL_ELEMENTS
-
2
) 改成
if
( d
<=
(
int
)
TOTAL_ELEMENTS
-
2
)
建议: 在代码中尽量少使用无符号类型,特别不要因为有些年龄,人口等无负数的值,而使用无符号类型。
绿色通道:
好文要顶
关注我
收藏该文
与我联系
posted on 2005-08-31 21:24
我在等待
阅读(206)
评论(0)
编辑
收藏
注册用户登录后才能发表评论,请
登录
或
注册
,
返回博客园首页
。
首页
博问
闪存
新闻
园子
招聘
知识库
最新IT新闻
:
·
使用Google钱包的坏消息,root后的设备存在PIN码泄露隐患
·
Windows 8省电新招:挂起Metro应用
·
清华网络机器人可与人交流走红
·
苹果收紧Mac应用开发控制:限制调用摄像头
·
消息称苹果将于3月第一个星期发布下一代iPad
»
更多新闻...
最新知识库文章
:
·
如何学习一门新的编程语言?
·
学习不同编程语言的重要性
·
为什么我喜欢富于表达性的编程语言
·
计算机专业的女生为什么要学编程
·
前端必读:浏览器内部工作原理
»
更多知识库文章...
China-pub 2011秋季教材巡展
China-Pub 计算机绝版图书按需印刷服务
昵称:
我在等待
园龄:
6年10个月
粉丝:
0
关注:
0
<
2012年2月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
随笔档案
2007年3月 (1)
2005年8月 (2)
2005年5月 (5)
2005年4月 (11)
文章分类
C/C++(3)
DotNET(4)
Office COM Addin(1)
Web Service(4)
学习笔记(3)
RSS related
大鱼儿@Dayuer
不少ASP.NET的学习资料,比较多的链接。
开发语言和工具
MSDN中国网站的C#,VB.NET等
最新评论
阅读排行榜
评论排行榜
推荐排行榜