ASCII最大数值

时间:2013-11-06 09:41:50

标签: c

当我保持大于255(十进制)的值并打印ASCII字符时,程序会打印一些字符。为什么? 254不是ASCII中最大的数字?当我持有负数(例如:-6)但是不能为-1和0工作时会发生同样的事情。为什么?

3 个答案:

答案 0 :(得分:5)

取决于您的机器会发生什么。

超出最大可表示的值通常会回绕。因此,例如,如果你持有256,它将回绕到0,257将给你1等,或者,如果你的机器使用有符号字符而不是256,最大值将是127,并且128包围到最负值(即,具有8位字符的-128,假设2的补码表示)。如果这些值碰巧代表一个有效的可打印字符,那就是你得到的。

请注意,假设溢出值环绕通常是不安全的:C标准不需要这样做,因此,从技术上讲,依赖于该技巧的程序具有未定义的行为。

答案 1 :(得分:0)

这是未定义的行为,确切的结果将取决于您的编程语言/编译器/计算机等的某些组合。有时您会遇到异常或崩溃,有时您会得到一个角色。在角色的情况下,你最有可能看到的是溢出。标准字符类型是一个字节,由8位组成,可以是0或1.详细信息将根据您的系统而有所不同,但会发生的情况如下:

您尝试分配256,其二进制表示如下所示:

 1 0000 0000 (a one with 8 zeros)

到char,只能容纳8位。因此,第一位被截断,留下你:

 0000 0000 (8 zeros)

这相当于值0.所以,如果你的系统碰巧像我描述的那样工作,你最终会打印出与值0相关联的ascii字符。上面有几种不同的方式可以玩取决于像endianness这样的系统细节。

答案 2 :(得分:0)

当您%c打印字符时,它会访问1byte打印1byte的内容。可以使用unsigned = 8bits表示的最大1byte个数字为255 (0 to (2pow(8-1))-1),即0 to 255

即来自

0000 0000 

1111 1111

当您尝试使用%c打印257二进制(1 0000 0001)时,它只会看到1 byte,即0000 0001。打印0000 0001的对应字符。