当前位置:  开发笔记 > 编程语言 > 正文

一元 - 和n之间有区别吗?

如何解决《一元-和n之间有区别吗?》经验,为你挑选了1个好方法。

我相当肯定uint8_t从另一个中减去一个应该导致另一个无符号数,但我的一些结果让我感到困惑.

  uint8_t a = 2;
  uint8_t b = 1;
  uint8_t c = -a;
  long d = b - a;
  long e = b + c;

当我获得d它产生的价值时-1,e正如我所期望的那样255.这是gcc我正在使用的版本的错误.....对吗?

作为参考,我正在使用arm-none-eabi-g++编译器MSP-432.

看着这似乎表明gcc这里似乎犯了同样的错误.

看看这个问题似乎看起来像神弩和手臂gcc是错误的.

这里发生了什么?



1> Baum mit Aug..:

这是我正在使用的gcc版本的错误.....对吗?

不,这不对.像gcc这样的大型编译器中出现错误的东西极不可能.

会发生什么是由于"通常的算术转换",特别是"整数提升":

一元-促进aint,然后(int)-2转换回到uint8_t赋值中,屈服c == 254(这是Z mod 2 ^ 8中等价类-2的代表,位于[0,2 ^ 8)).

同样,二进制+-下面的行提升int,所以我们最终得到

d == (int)b - (int)a == (int)1 - (int)2 == -1

e == (int)b + (int)c == (int)1 + (int)254 == 255

所以一切都按照标准的要求正常工作.

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有