unsigned char 移位

shenmou 2007-05-10 11:48:59
unsigned char valChar;
unsigned int valInt;

valChar = 0x01;
valInt = valChar << 16


;;得到结果 valInt = 0x00010000;
安照道理,是不是valChar 移位的时候回溢出的。
...全文
454 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Michael_555 2007-05-10
  • 打赏
  • 举报
回复
valChar = 0x01;
valInt = valChar << 16

楼主是用VC、Dev-C++之类的32位的编程工具测试的吧, 因为他们的int为32位的。
如果换成TC2.0的之类的DOS平台编程工具,valInt就会等于0了
0黄瓜0 2007-05-10
  • 打赏
  • 举报
回复
C\C++中的移位运算都会转为unsigned int然后再移.
jixingzhong 2007-05-10
  • 打赏
  • 举报
回复
中间结果不是 unsigned char
eggqq007 2007-05-10
  • 打赏
  • 举报
回复
移位是不会造成溢出的。
yoyo_alex_lw 2007-05-10
  • 打赏
  • 举报
回复
兄弟,移位怎么会溢出呢?比如0x01,右移n(n>0)位,结果总是0x00.实在不懂,就看看汇编书
shenmou 2007-05-10
  • 打赏
  • 举报
回复
是我的问题没有表达清楚, 想要问的是 标准c 对这个有没有定义?

移位运算 中间结果转换为 int 有定义么?
yoyo_alex_lw 2007-05-10
  • 打赏
  • 举报
回复
我用vs2005做了一些测试.用sizeof(c<<n),sizeof(c>>n),无论n为何整数,size都是4,即4个字节,也就是说,c/c++语言在移位时,首先将数据转为32位数,经测试,32位数以补码形式存储.对于左移,无论被移位数是正数还是负数,末位都以0填充;如果是右移位,那么,正数移位时,高位以0填充,负数以1填充.移位数量以32求模后得到的数作为最终移位数量.以上结论都做过测试.

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧