在c中的signed和unsigned char之间的区别

C中signed和unsigned char什么区别? 当我试图运行下面的代码而没有unsigned它时,它进入了一个无限循环,因为signed char的范围最大为127 (为什么它默认签名?)。 但是,当我添加unsigned (其范围高达255),它工作正常。 什么原因 ?

#include <stdio.h>

int main() {
    unsigned char x;
    x = 0;
    while (x <= 225) {
         printf("%c=%dn", x, x);
         x = x + 1;
    }
    return 0;
}

C语言中没有专用的“字符类型”。 char是一个整数类型,与int,short和其他整数类型相同(在这方面)。

  • 它们都是整数类型。
  • 他们有相同的大小(一个btye)。
  • 如果你使用数字作为字符

  • 签名字符,它给你至少-127至127范围。 (-128到127是常见的)
  • 无符号字符,它给你至少0到255的范围。
  • 从3.9.1基本类型

    Plain char,signed char和unsigned char是三种不同的类型。 char,signed char和unsigned char占用相同的存储量并具有相同的对齐要求(3.11); 也就是说,它们具有相同的对象表示。


    随着声明

    x=x+1;
    

    有几件事发生。

    首先评估表达式x + 1 。 这将导致对x中的值进行通常的算术转换,以便将其提升为int 。 (提升的)值将增加1 ,然后结果将被分配回x 。 这里的问题开始了。

    因为x + 1的结果是一个int所以需要将它转换回( signedchar 。 这是通过整数转换完成的,当从较大的带符号类型(如int )转换为较小的带符号类型(如带signed char )时,如果该值不适合较小的类型(如试图将128存储在signed char )行为是实现定义的。

    实践中发生的情况是,该值变为负值(值从0x7f增加到0x80 ,即二进制补码中的-128 (最常见的负数编码))。 这进一步导致x永远小于225和你的无限循环。


    签名的字符范围是-128至127。 无符号字符范围为0到255.如果x变量定义为无符号字符,则while循环将按预期工作。

    如果用signed char定义变量,那么变量'x'介于-128到127之间。它总是小于255。

    链接地址: http://www.djcxy.com/p/96709.html

    上一篇: Difference between in signed and unsigned char in c

    下一篇: How to easily convert an unsigned string to a string?