signed 与 unsigned 比较大小的默认转换
2016-08-02 19:02
2711 查看
学习c语言的朋友们也许都学到了int型与unsigned int型比较大小的方法。比如以下程序:
#include <stdio.h>
int main()
{
int a = -1;
unsigned int b = 1;
if(a > b){
printf("a = %d\n",a);
} else {
printf("b = %d\n",b);
}
return 0;
}
输出结果是: a = -1
原因在于int 型与unsigned int 型在自己没有进行强制转换的情况下进行比较。int类型在linux下默认情况为signed char类型,a与b比较的时候,a会自动转换成unsigned int类型进行比较。由于signed int的负数最高位是1,转换成unsigned int之后,就会变成一个很大的unsigned int型正数,所以a与b比较时a会大于b。所以会输出a = -1;
而在遇到char 与 unsigned char 进行比较的时候,情况就不一样了。如一下程序:
#include <stdio.h>
int main()
{
char a = -1;
unsigned char b = 1;
if(a > b){
printf("a = %x\n",a);
} else {
printf("b = %x\n",b);
}
return 0;
}
输出结果为: b = 1
原因在于char类型在linux下默认是signed char类型。char型与unsigned char型进行比较的时候,发生的默认转换是不同的,与上面恰恰相反。unsigned char会默认转换成signed char类型进行比较。a是存的-1,b转换成signed char也还是1,所以a与b比较时a会小于b。所以会输出b = 1。
#include <stdio.h>
int main()
{
int a = -1;
unsigned int b = 1;
if(a > b){
printf("a = %d\n",a);
} else {
printf("b = %d\n",b);
}
return 0;
}
输出结果是: a = -1
原因在于int 型与unsigned int 型在自己没有进行强制转换的情况下进行比较。int类型在linux下默认情况为signed char类型,a与b比较的时候,a会自动转换成unsigned int类型进行比较。由于signed int的负数最高位是1,转换成unsigned int之后,就会变成一个很大的unsigned int型正数,所以a与b比较时a会大于b。所以会输出a = -1;
而在遇到char 与 unsigned char 进行比较的时候,情况就不一样了。如一下程序:
#include <stdio.h>
int main()
{
char a = -1;
unsigned char b = 1;
if(a > b){
printf("a = %x\n",a);
} else {
printf("b = %x\n",b);
}
return 0;
}
输出结果为: b = 1
原因在于char类型在linux下默认是signed char类型。char型与unsigned char型进行比较的时候,发生的默认转换是不同的,与上面恰恰相反。unsigned char会默认转换成signed char类型进行比较。a是存的-1,b转换成signed char也还是1,所以a与b比较时a会小于b。所以会输出b = 1。
相关文章推荐
- C++ signed和unsigned 大小比较
- signed和unsigned的比较
- signed和unsigned的比较
- C判断char型和unsigned int型比较大小,LmiQueryCSmd
- signed和unsigned的比较
- signed和unsigned的比较
- unsigned和signed比较
- Signed变量和Unsigned变量的比较
- signed和unsigned的比较
- C/C++之char,short ,long,double,float,int, signed, unsigned
- VC/MFC 时间格式转换和比较大小 CString转为COleDateTime
- struts2标签比较时间大小
- 简单的js比较时间的大小
- UVA - 1606 Amphiphilic Carbon Molecules : 极角扫描法 利用叉积比较极角大小
- java中比较float和double的大小
- js 比较日期大小
- C#里面比较时间大小三种方法
- bash新手if语句实现三个数比较大小
- 2437比较大小类模板
- <c:if test="${ }"> 两个参数比较大小