C中unsigned int和int有什么区别?

查看:98
本文介绍了C中unsigned int和int有什么区别?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

int main () {

unsigned int a = -2;
printf("%d", a); // -2

return 0;

}

好像用起来没什么区别?

解决方案

类型,决定了编译器如何解释一段内存的内容,比如-24294967294 其实在内存类保存的都是0xFFFFFFFE。当解释为signed 之后,就是前者,unsigned就是后者,甚至可以解释为是float
而整型(包括char)间的类型其实只是改变解释方式,而不改变内存状态,所以unsigned int a=-2a=0xFFFFFFE没有区别。

printf的第二个以及之后的可以是任意类型的,所以,其实是printf这个函数让解释器是按照那些%d之类的东西确定为,比如%dsigned %uunsigned

记住一件事情,类型仅仅是为了防止我们这群菜鸟犯错,编译后的代码是没有类型这么一说的。所以,在编译器保证没错的情况下,可以自动类型转换。在你很确定你没错的情况下,可以进行强制类型转换。
在java里面要求if后面必须是Boolean为了防止==写成=,比如if(a==1)(所以C里面一般到过来写if(1==a))。这么做有好也有不好,好的是防止你犯错,坏的是没有那么灵活了万一你真想写if(a=1)呢,就要多加几个符号进行强制类型转换了。

#include<stdio.h>

int main(){
    int a=0xFFFFFFFE;
    float f,*p;
    f=a;// signed整形转为float,这个类型转换会改变内存的状态
    printf("%f",f); // -2.0000...
    f=(unsigned int) a;  // 整型间的类型其实只是改变解释方式,而不改变内存状态。
    printf("%f",f); // 4294967294.000...
    p = (float *)&a;
    printf("%d %u %f",a,a,*p); // -2 4294967294 -nan
    return 0;
}

至于为什么最后一个是NaN(Not A Number)
请看IEEE754标准:http://baike.baidu.com/link?u...

这篇关于C中unsigned int和int有什么区别?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆