返回信息流代码:
#include <stdio.h>
void fun(unsigned char b)
{
printf("%d\r\n", b);
}
void main(void)
{
unsigned char a = 0;
int j ;
for (j = 0; j < 300; j++) {
fun((a - 11) % 128);
a++;
}
fun(245 % 128);
}
当a = 0的时候,结果为245,而不是117。请问这是为什么呢?忘了哪本书里有介绍了。
注意a的数据类型和fun()入参的数据类型。
这是一条镜像帖。来源:北邮人论坛 / cpp / #18427同步于 2009/1/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
一个关于数据类型扩展的问题
wangzai
2009/1/8镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
-11%128=-11
用unsigned char表示就是256-11=245
【 在 wangzai (旺仔) 的大作中提到: 】
: 代码:
: #include <stdio.h>
: void fun(unsigned char b)
: ...................
两个转换
第一个是对fun参数b赋值时,把int转换为unsigned char
第二个是对a做运算是把unsigned char提升为int
a=0时,先提升为int,-11%128 = -11 ,就是0xfffffff5
然后把-11赋给unsigned char的b时发生字节截断,变成0xf5
然后再把b提升为int输出,就变成0x000000f5,就成了245了
如果定义的是char b,最后一步提升的时候就变成0xfffffff5了,就是-11了
【 在 tiemeng 的大作中提到: 】
: 两个转换
: 第一个是对fun参数b赋值时,把int转换为unsigned char
: 第二个是对a做运算是把unsigned char提升为int
: ...................
回答很细致,顶!
【 在 tiemeng 的大作中提到: 】
: 两个转换
: 第一个是对fun参数b赋值时,把int转换为unsigned char
: 第二个是对a做运算是把unsigned char提升为int
: ...................
顶