不同类型的变量相加

原创 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

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

相关文章推荐

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

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

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

一、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 & Java)

一. Java 1.变量定义:一个由标识符定义的数据项,包括类型、名称和值三个部分     2.变量分类: 类型 大小 说明 ...

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

转自:http://panjunlai.blog.163.com/blog/static/5819030120104207757620/ 创建类的一个实例时,在执行构造函数之前,如果你没有给成员变量...

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

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

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

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

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

不同类型指针的总结。指向不同类型变量或函数的pointer。

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

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

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

1、布尔变量与零值比较 不可将布尔变量直接与 TRUE、FALSE 或者 1、0 进行比较。 根据布尔类型的语义,零值为“假” (记为 FALSE) ,任何非零值都是“真” (记为TRUE) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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