繁体   English   中英

指针分配-uint16_t

[英]Pointer assignment - uint16_t

我正在从cs61c(ucb)看问题。 我有以下方法:

void lfsr_calculate(uint16_t *reg) {                                      
  uint16_t result = compute_bit_val(*reg);                              
  printf("reg value: %d", *reg);                                        
  printf("bit val result: %d", result);                                 
  printf("bit val result shifted: %d", result << 16);                   
  *reg >>= 1;                                                           
  printf("bit val result shifted plus zero: %d", *reg + (result << 16));
  *reg = (uint16_t) *reg + (result << 16);                              
  printf("new reg: %d", *reg);                                          
}

如果* reg为1,则我的方法compute_bit_val返回1。打印输出为

1 

1

65536

65536

**0**

?!?!?!! 我正在拔头发,不知道为什么最后一个部分为零,由于某种原因,分配无法正常工作。 我尝试了这种情况,无论有无强制转换,它都能得到相同的结果。

在最后一步中,将65536分配给*reg ,即uint16_t 但是uint16_t只能存储065535值,因此可以通过模块化算法将其调整为值为0 (又名环绕)。

您可能忽略了整数算术总是至少以int精度执行; 在计算任何算术运算符的结果之前,将较窄的类型立即提升为int

暂无
暂无

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

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