在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