Quantcast
Channel: C++博客-所有随笔
Viewing all articles
Browse latest Browse all 7882

从缺陷中学习C/C++

$
0
0

有符号int与无符号int比较的后果
int i = -1;
unsigned 
int ud=1;
if(i < ud)
{
    printf(
"true");
}

else
{
    printf(
"false");
}
一看结果应该是打印出true,但事实却是false。
signed int 型变量被转换成unsigned int型变量。-1转换成unsigned int的结果是一个非常巨大的正整数(32位系统上是2的32次方-1),需要进行强转为int型。

位域变量
struct data
{
int flag:1;
int other:31;
}
;
printf(
"data size %d\n",sizeof(data));
data test1;
test.flag
= 1;
if(test.flag ==1)
{
printf(
"true");
}

else
{
printf(
"false");
}
int的位域变量,而用一个bit表示int时,这一位是用来表示有符号位的,带符号的一个bit的位域变量的取值范围是0或-1.无符号的一个bit的位域变量的取值范围是0或1,故1赋给flag时会出现溢出,flag变为-1.
Reference:http://wenku.baidu.com/view/670eff4bf7ec4afe04a1dfd7.html

Daywei 2014-07-24 15:29 发表评论

Viewing all articles
Browse latest Browse all 7882

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>