【问题标题】:what's the exact type of expression: addition of two value of type unsigned char表达式的确切类型是什么:添加两个 unsigned char 类型的值
【发布时间】:2012-05-08 18:46:43
【问题描述】:
unsigned char c0=255,c1=1;
char c2=c0+c1;   //(1)

没有任何警告(/W4),c2 为 0

int i=c0+c1;    //(2)

没有任何警告(/W4),我是 256

表达式(c0+c1)的类型是什么?如果是 unsigned char,为什么不是 (2) 中的 0。如果是 int,为什么 (1) 中没有警告。

似乎与“整数提升”有关。

求救!!!

【问题讨论】:

    标签: c visual-c++


    【解决方案1】:
    unsigned char c0=255,c1=1;
    char c2=c0+c1;
    

    c0 + c1 的类型为 int,其计算结果为 256。此int 值在分配给c2 时将转换为char。不需要警告,因为您始终可以分配任何不同算术类型的操作数。 (从技术上讲,它是一个初始化,但相同的类型和转换约束适用于赋值和初始化)。

    int i=c0+c1;
    

    c0 + c1 仍然是 int 类型,并且在分配期间没有发生转换。

    【讨论】:

    • 如果(c0+c1)的类型是int,其值为256,则c2为0。因为它等价于:char c2=(char)256;
    【解决方案2】:

    在情况 1 中,类型为 unsigned char,因为您已将 c2 的类型指定为 unsigned char,而在情况 2 中,类型为 int,因为您已指定i 的类型为 int。

    【讨论】:

    • 编译器是否通过赋值左侧推断目标类型(表达式类型)?有没有人有其他意见?
    猜你喜欢
    • 2013-09-19
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 2012-04-20
    • 2021-06-16
    相关资源
    最近更新 更多