weixin_67303834 2022-03-13 12:31 采纳率: 73.3%
浏览 197
已结题

想问位运算符相关,为什么正数左移后打印出来变成负数

void bit_calcu()//位运算
{
int i = 6;
short f = 0x70ff;
f = f << 1;
printf("f<<1=%d\n", f);
printf("i<<1=%d\n", i << 1);
printf("i=%d\n", i);
}

大家好,这是我的一段代码,想知道为什么f左移后,打印出来变成负数,麻烦解释的通俗易懂一点,谢谢

  • 写回答

1条回答 默认 最新

  • 浪客 2022-03-13 13:05
    关注

    int 字节第一位是符号位,0为正数,1为负数。
    70ff 二进制 0111 0000 1111 1111
    左移1后,第一位变成了1。

    img

    只改变第一位

    img

    左移

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    weixin_67303834 2022-03-13 14:04

    那这个与short四字节运算还有溢出什么的有关系吗

    回复
    浪客 回复 weixin_67303834 2022-03-13 14:18

    你可以看一下sizeof(short),一般是2字节,也就是图片中间的WORD,0-15
    int 一般是4字节,图上计算器中要用DWORD,0-31

    回复
    qq_35474636 回复 浪客 2022-11-12 05:26

    int a=1;
    a1=a<<31;//a1=-2147483648,证明1移到符号位上了,没有保留符号值
    a2=a1>>31;//a2=-1,保留了符号值
    也就是左移不保留符号值,但无论右移多少位都保留符号值;好奇怪啊。

    回复
    展开全部4条评论
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月13日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部