回 帖 发 新 帖 刷新版面

主题:新人求教:关于转义字符问题

碰到以下问题,希望明白的朋友给予解答,先谢谢了。

一.
#include<stdio.h>
main()
{
char a='\375';
printf("%d\n",a);
}

运行结果:-3

这个转义字符是8进制的,转换为10进制应该是253,去找Asc码找对应符号应该是[color=FF0000][color=000000]'Z'[/color][/color],为什么结果却是[color=FF0000]-3[/color]???

二.
#include<stdio.h>
main()
{
int a=300;
char c;
c=a;
printf("%d",c);
}

运行结果:44

这道题是因为超出Asc码取值范围而溢出?300-255=45,超出部分重新取码得到的44?

回复列表 (共3个回复)

沙发

1、ASCII碼只有0-127,更高的是擴展ASCII,再者說您這個是輸出整型數據的格式化字符串;
2、結果溢出,則應是300%256——而不是255。取模后就是44。

板凳

[quote]1、ASCII碼只有0-127,更高的是擴展ASCII,再者說您這個是輸出整型數據的格式化字符串;
2、結果溢出,則應是300%256——而不是255。取模后就是44。[/quote]

谢谢您的答复!第二题关于溢出的没有问题了,可是第一题还是不太懂。。。
在网上查了些资料,说是自动转换的问题,将char型数据赋给int型变量时,由于占用字节不同,会产生2种情况:
(1)把字符8位放到int型变量低8位,其余补零
(2)把int型其他位填充为该char型符号位的值

看了看,更晕了。我只想知道字符常量'\375'赋给无符号整形时,%d整形输出为什么会是-3,这中间是怎么计算的,这个问题困扰好几天,实在想不通,希望再说的详细些!

3 楼

你那個'\375'明明是給了char型啊,怎么是給無符號整型呢?
是這樣的:
'\375'給char(一般char默認表示的是有符號char型),也就是說:
a里存的是
(1111 1101)2
此時這個是一個符號位為1的補碼表示的數,換成有符號的十進制的過程就是:
1111 1100(減一)
1000 0011 (除符號位以外取反)
符號為負,值為:
000 0011=3
則結果為-3。

我来回复

您尚未登录,请登录后再回复。点此登录或注册