不同类型的变量相加

原创 2016年06月01日 14:40:13

不同类型的变量相加要注意的就是整型提升,关于整型提升,已经在我的上一篇博客中介绍了,感兴趣的话可以去看一下。

看下面的例子:

#include<stdio.h>

int main()
{
    char c;
    unsigned char uc;
    unsigned short us;
    c = 128;
    uc = 128;
    us = uc + c; 
    printf("0x%x ",us);
    us = (unsigned char)c + uc;
    printf("0x%x ",us);
    us = c + (char)uc;
    printf("0x%x ",us);
    return 0;
}

1.us = uc + c;
c可以表示为: 10000000
整型提升以后为:11111111 11111111 11111111 10000000
因为c是singned数,所以整型提升的时候前面补符号位;
uc可以表示为:00000000 10000000
整型提升以后为:00000000 00000000 00000000 10000000
因为uc是unsigned数,所以提升的时候前面补0;
两折相加,赋值给us
输出us为0x0

2.us = (unsigned char)c + uc;
c可以表示为: 10000000
整型提升以后为:00000000 00000000 00000000 10000000
因为c是unsigned数,所以整型提升的时候前面补0
uc可以表示为:00000000 10000000
整型提升以后为:00000000 00000000 00000000 10000000
因为uc是unsigned数,所以提升的时候前面补0;
两折相加,赋值给us
输出us为0x100

3.us = c + (char)uc;
c可以表示为: 10000000
整型提升以后为:11111111 11111111 11111111 10000000
因为c是signed数,所以整型提升的时候前面补符号位
uc可以表示为:00000000 10000000
整型提升以后为:11111111 11111111 11111111 10000000
因为uc是signed数,所以提升的时候前面补符号位;
两折相加,赋值给us
输出us为0xff00

版权声明:本文为博主原创文章,未经博主允许不得转载。

深入理解C系列:不同类型变量的变量名和内存间的关系

有了前面两篇的基础,下面正式开扒变量名和内存的关系,先看一段大家很熟悉的代码:   int i;   scanf_s("%d", &i); int i;,在这一句就为i分配了内存(但尚...

C#不同类型的成员变量(字段)的默认值

创建类的一个实例时,在执行构造函数之前,如果你没有给成员变量赋初始值,C#编译器缺省将每一个成员变量初始化为他的默认值。 如果变量是方法的局部变量,编译器就会认为在使用该变量之前,代码必须给它显...
  • md521
  • md521
  • 2011年11月10日 14:49
  • 1806

C++(8):指向不同类型变量或函数的pointer

不同类型指针的总结。指向不同类型变量或函数的pointer。
  • qcyfred
  • qcyfred
  • 2016年12月04日 20:44
  • 380

关于c语言不同类型变量存放位置的个人理解

1 首先可以认为代码分成一下几段: 1text段(用来存放代码) 2data段 3bss段 (用来存放未初始化和初始化为0的全局变量) 该段在运行初始化时编译器会将bss段全部清0,所以全局变量没有初...

不同类型变量与零值的比较 【C语言规范】

1、布尔变量与零值比较 不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较。 根据布尔类型的语义,零值为“假” (记为 FALSE) ,任何非零值都是“真” (记为TRUE) ...
  • rig622
  • rig622
  • 2012年01月06日 11:41
  • 754

【基础】ABAP不同变量类型之间数值大小比较

这个问题很容易被忽视,在这里写了一段代码分析一下三种情况: DATA:lv_num1 TYPE string. DATA:lv_num2 TYPE string. DATA:lv_num...

由scanf说起之2:由scanf看 不同类型变量的变量名和内存的关系

在使用scanf时很需要注意一点就是取地址运算符&,这个运算符不留神就很容易忘记,将会产生是一个针对内存的冲突,错误不易查找并且严重,见下面的代码:   int i = 2;   scanf_s...
  • sole_cc
  • sole_cc
  • 2014年10月14日 15:44
  • 539

不同类型的变量在内存中存储的详细情况

一、int型变量在内存中存储详细情况 [cpp] view plaincopyprint? //By Richard #include #include int mai...

C++不同类型数值变量之间相互赋值的规则

C++不同类型数值变量之间的相互赋值,可以用以下的伪代码来描述:type1 a = ?; type2 b = ?; b = a; 或 b = (type2)a;示例:short a = 0xFF00;...

深入理解C系列:不同类型变量的变量名和内存间的关系

有了前面两篇的基础,下面正式开扒变量名和内存的关系,先看一段大家很熟悉的代码:   int i;   scanf_s("%d", &i);   int i;,在这一句就为i分配了内存(...
  • sole_cc
  • sole_cc
  • 2014年10月14日 16:28
  • 554
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:不同类型的变量相加
举报原因:
原因补充:

(最多只允许输入30个字)