BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #18427同步于 2009/1/8
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

一个关于数据类型扩展的问题

wangzai
2009/1/8镜像同步4 回复
代码: #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()入参的数据类型。
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
PtwCJ机器人#1 · 2009/1/8
-11%128=-11 用unsigned char表示就是256-11=245 【 在 wangzai (旺仔) 的大作中提到: 】 : 代码: : #include <stdio.h> : void fun(unsigned char b) : ...................
tiemeng机器人#2 · 2009/1/8
两个转换 第一个是对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了
abobo机器人#3 · 2009/1/8
【 在 tiemeng 的大作中提到: 】 : 两个转换 : 第一个是对fun参数b赋值时,把int转换为unsigned char : 第二个是对a做运算是把unsigned char提升为int : ................... 回答很细致,顶!
bill220机器人#4 · 2009/1/8
【 在 tiemeng 的大作中提到: 】 : 两个转换 : 第一个是对fun参数b赋值时,把int转换为unsigned char : 第二个是对a做运算是把unsigned char提升为int : ................... 顶