繁体   English   中英

在进行辅助操作时,将类型转换为比实际更长的数据类型时,c中的类型转换的行为

[英]How typecasting in c behave when typecast it to longer data type than actual while doing assigenment operation

这里tv_sec是4字节长,但是正在将其类型转换为8字节变量。 变量“ t”可能在8个字节中有一些垃圾值。 该值将如何填充剩余的4个字节。

{ 
    long long t;
    gettimeofday(&tv,NULL);
    t = (long long)(tv.tv_sec) * 1000 ;
    // Some Operation  
}

根据C标准:6.3.1.3(强调型):

将具有整数类型的值转换为_Bool以外的其他整数类型时,如果该值可以由新类型表示,则该值不变

tv_sec的类型是否为整数类型? 是。

tv_sec的类型为time_t 但是,C标准未指定time_t in的基础类型。 在符合POSIX的系统中, time_t表示秒数,通常以带signed integer

强制转换会导致转化。 转换数字类型时,如果新类型可以表示旧类型中的值,则结果将是该值,且保持不变。

因此,当转换为较宽的数字类型时,C实现会产生需要任何位来表示输入值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM