变量t被分配为负值时,类型为size_t的变量t的实际值是多少?

时间:2019-06-06 10:31:04

标签: c++ c++11 codeblocks unsigned-integer size-t

-1 分配给类型t的变量size_t,并使用 -1 4294967295 ( FFFFFFFF ,是2的 -1 补充;我的系统是 64位;值可能会随系统而异),然后在两种情况下,它返回 1 ,即 true

代码为

int main(){
    unsigned int t = 10;
    cout<<"t = -1: "<<(t==-1);  //checks if t is -1
    cout<<"\nt = 4294967295: "<<(t==4294967295);   //checks if t is 4294967295
    cout<<"\nt: "<<t;    //printing actual value of t
    int p = t;    //typecasting it to int
    cout<<"\np: "<<p;    //printing value of p
}

实际输出为

t = -1: 1
t = 4294967295: 1
t: 4294967295
p: -1

为检查1(t==-1)都返回(t==4294697295),但输出t = 4294697295和输出p = -1。 变量 t 是否包含两个值,即 -1 4294697295 。 绝对不是这样。

需要帮助。 系统内部实际发生了什么?

1 个答案:

答案 0 :(得分:2)

在将带符号的值与无符号的值进行比较时,将带符号的值在比较之前转换为无符号。这是在编译过程中完成的。因此t==-1变成t==4294967295u,而t==4294967295(有符号整数文字)变成t==4294967295u

参考:http://eel.is/c++draft/expr.arith.conv

  

(1.5.3)   否则,如果具有无符号整数类型的操作数的秩大于或等于另一个操作数的类型的秩,则具有符号整数类型的操作数应转换为具有无符号整数类型的操作数的类型。