C中字符的增量

时间:2016-09-21 10:59:08

标签: c char do-while

methods: {
  delete ()
  {
    if (!this.deleting) {
      this.deleting = true

      swal({
        title: "Weet u het zeker?",
        text: "Het is niet mogelijk deze handeling te herstellen!",
        cancelButtonText: 'Stop',
        type: "error",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Ja, verwijder deze rit.",
        closeOnConfirm: false
      }, () => {
        RideService.destroy(this.ride)
          .then(() => {
            swal({
              title: "Rit succesvol verwijderd",
              type: "success",
              showCancelButton: false,
              timer: 2000,
              showConfirmButton: false
            });
            this.deleting = false;
            this.$router.go('/administratie/ritten');
          });
      });
    }
  }
}

有人可以向我解释为什么在第一次循环之后,c的值会变成-128吗?

3 个答案:

答案 0 :(得分:6)

因为您的编译器默认charsigned char。因此它的值范围是-128到127,递增127是触发环绕。如果您想避免这种情况,请明确,并将您的变量声明为unsigned char

请注意,要正确执行此操作,您还需要更改printf;您是以签名int值(%d)打印的;要100%类型正确,您需要匹配类型,因此对于签名字符,格式代码应为%hhd,对于无符号字符,格式代码应为%hhu。由于varargs的推广规则,%d会有效,但是一直使用%d是一个坏习惯;当您使用unsigned打印%d时,您的系统可能会成功,但会显示较大的值为负值,让您感到困惑。

答案 1 :(得分:1)

尝试使用unsigned char计算最多255个

答案 2 :(得分:0)

这个问题的另一个简单解释

这种情况称为signed char的溢出。 unsigned char的范围是-128 to 127。如果我们将指定一个大于127的值,那么如果我们将按照数字顺序移动顺时针方向,则变量值将更改为一个值。如果我们将分配一个小于-128的数字,那么我们必须逆时针方向移动。

当变量值为127时,它就可以了。但如果变量值增加1,则时钟增量也增加1,它的位置值-128。所以你的输出是-128。

Demo Image

Demo Link