在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和其他整数类型相同(在这方面)。
如果你使用数字作为字符
从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
所以需要将它转换回( signed
) char
。 这是通过整数转换完成的,当从较大的带符号类型(如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