关闭

关于有符号数移位问题

2822人阅读 评论(0) 收藏 举报
分类:

   有符号数,正数最高位为0, 负数最高位为1
   有符号数右移时正数空位填0,负数空位填1


    如:-2(在内存中存储为11111111 11111111 11111111 11111110),负数在内存中存储的形式以补码存储(也就是反码加1)
   

    如果左移4位则a=11111111 11111111 11111111 11100000(在内存存储的格式)
    用%d输出后十进制会是多少呢?
    首先负数在内存中存储的格式转化成十进制后应该先减1再取反,即:a-1(11111111 11111111 11111111 11011111)
    然后除符号位其余取反:10000000 00000000 00000000 00100000则该数值为-32,也就是-2左移4位后变为-32
   
    同理-2右移4位,此时空位填1移动后在内存存储的形式为:11111111 11111111 11111111 11111111
    用%d输出后十进制会是多少呢?
    首先负数在内存中存储的格式转化成十进制后应该先减1再取反,即:a-1(11111111 11111111 11111111 11111110)
    然后除符号位其余取反:10000000 00000000 00000000 00000001则该数值为-1,也就是-2右移4位后变为-1



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31843次
    • 积分:439
    • 等级:
    • 排名:千里之外
    • 原创:10篇
    • 转载:16篇
    • 译文:0篇
    • 评论:2条
    最新评论