代码之家  ›  专栏  ›  技术社区  ›  user8329645

c中有符号和无符号字符之间的差异

  •  2
  • user8329645  · 技术社区  · 8 年前

    char 在C中?当我尝试在没有 unsigned 127 (为什么默认签署?)。但是当我加上 (其范围高达255)工作正常。原因是什么?

    #include <stdio.h>
    
    int main() {
        unsigned char x;
        x = 0;
        while (x <= 225) {
             printf("%c=%d\n", x, x);
             x = x + 1;
        }
        return 0;
    }
    
    6 回复  |  直到 8 年前
        1
  •  4
  •   Kemal Güler    8 年前

    C语言中没有专用的“字符类型”。char是一种整数类型,与int、short和其他整数类型相同。

    • 它们都是整数类型。

    如果您使用数字作为字符

    • 127是常见的)

    纯字符、有符号字符和无符号字符是三种不同的类型。A. 字符、有符号字符和无符号字符占用相同数量的 具有相同的对象表示。

        2
  •  3
  •   Some programmer dude    8 年前

    声明

    x=x+1;
    

    首先是表达式 x + 1 将进行评估。这将导致 usual arithmetic conversion 中的值 x 所以它变成了 promoted to an int 1 ,然后将结果分配回 .问题就从这里开始。

    因为 是一个 整数 它需要转换回( signed char .这是通过 integer conversion )到较小的有符号类型(如 signed char 128 在一个 签名字符 )行为是 定义的实现

    实际上,价值变成了 消极的 0x7f 0x80 -128 two's complement x 225 还有你的无限循环。

        3
  •  1
  •   Rajeshkumar    8 年前

    有符号字符范围为-128到127。无符号字符范围为0到255。

    如果用有符号字符定义变量,那么变量“x”位于-128到127之间。它总是小于255。

        4
  •  1
  •   dhokar.w    8 年前
    • char
    • signed 表示值可以是negatif或positif,在C标准中,变量声明为 signed chard -127 127
    • unsigned 仅表示正值,这导致变量声明为 unsigned char 0 255

    unsigned char x =-1 ,问题是x的值是多少?答案是x在机器中不是-1,因为编译器会将x作为char类型的正值,因此x将是 255 ,如果我们有 unsigned char x = -2

        5
  •  0
  •   Habeeb Rahman kalathil    7 年前

    无符号字符的简单含义是:在执行算术运算时,使用最高有效位,而不是将其视为+/-符号的位标志。

    如果使用char作为数字,则意义重大,例如:

    typedef char BYTE1;

    字节1 a; 字节2 b; 对于变量a,只有7位可用,其范围为(-127到127)=(+/-)2^7-1。对于变量b,所有8位可用,范围为0到255(2^8-1)。

    如果使用char作为字符,编译器将完全忽略“unsigned”,就像从程序中删除注释一样。

        6
  •  0
  •   Habeeb Rahman kalathil    7 年前

    Char是一种数据类型,在C编程中用于存储字母和标点符号等字符。然而,它仍然是整数类型。这是因为char type在技术上存储整数而不是字符。它使用数字代码,该代码使用整数表示字符 字符到int值的转换是由C自动完成的。然而,它仍然取决于决定结果是否为负的机器。大写A相当于整数值65。