整型的比较
来源:互联网 发布:网络终端机 远程桌面 编辑:程序博客网 时间:2024/06/05 17:50
环境:32位
遇到一个问题,就是在比较 -1和1U的时候,-1>1U。
特别是遇到的signed或者unsigned的时候,就更显得有点晕。
于是有了下面的小结,如果有问题的话希望大家能够指出,谢谢。
[K&R]中有这么一句话“在有符号值与无符号值之间的比较运算中,与机器相关,结果取决于机器中不同数据类型的大小”,看完之后有点不明白,于是,把书中的例子运行了一下,发现的确返回一个“比较大的正数”。但书中没有说具体的算法和原因。
其实应该是这样的:
当有符号值和无符号值之间进行比较时,需要进行类型转换,但从谁向谁转换呢?答案是有符号值向无符号值转换。
C语言中,是根据最大值来决定类型,即两个数值比较时,如果需要进行类型转换,转换方向为向类型所能表示数值范围大的。
例如,如果超出int型所能表示的范围,则用比int型大的最小类型来表示(unsigned int, long 或者unsigned long)。
这样,如果int与unsigned int进行比较,需要将int类型转换为unsigned int类型。
例如:
int t1 = -1;
int t2 = 1U;
t1在计算机中用补码表示为0xffffffff,转换为unsigned int类型为oxffffffff,十进制为4294967295,因此比1U要大。
各种整型范围的比较:
char(signed char)<unsigned char<short int(signed short int)<unsigned short int<int(signed int)<unsigned int<long int(signed int)<unsigned long int
- 整型的比较
- 整型表达式比较的潜在危险
- 整型表达式比较的潜在危险
- 整型变量的比较Integer与int
- 使用指针比较整型数据的大小
- Java 之 整型比较
- C#中常用的整型的转换比较
- 不同种类的整型比较,到底发生了什么?
- 整型 右移 与 除法 的优化比较
- 整型、实型、指针、bool与 0 的比较
- Java 基础 之 整型比较
- C/C++的64位整型 不同编译器间的比较
- C/C++的64位整型 不同编译器间的比较
- C/C++的64位整型 不同编译器间的比较
- C/C++的64位整型在不同编译器下的比较
- long long C/C++的64位整型 不同编译器间的比较
- C/C++的64位整型 不同编译器间的比较
- C/C++的64位整型 不同编译器间的比较
- 一个提问答题网站stackoverflow
- JAVA SWING
- 见习.Blog
- windows mobile平台中使用C#将byte数组转换为Format24bppRgb格式的图片
- 软件开发过程简述
- 整型的比较
- IE8下部分activex控件无法正常调用的设置
- 全排列的生成算法(转帖)
- C/C++语法知识:typedef struct 用法详解
- request_mem_region,ioremap 和phys_to_virt()
- 软件测试简述
- 完整类库列表struts2.0
- 装修资料
- js刷新页面方法大全