关于有符号数移位问题

原创 2013年12月04日 13:29:56

   有符号数,正数最高位为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



C语言 有符号数和无符号数的移位运算

对于无符号数来说,左移和右移都是用的逻辑移位,即左移低位空出的补0,右移高位空出的补0; 对于有符号数来说,用的是算术移位,左移多出的会移进符号位,右移在gcc编译器下是算术右移,即空出的高位补符号位...
  • qq_21411985
  • qq_21411985
  • 2015年02月23日 18:35
  • 2657

无符号和有符号数的二进制数右移

如果数字是一个无符号数值,则用0填补最左边的N位, 如果数字是一个有符号数值,则用1填补最左边的N位, 也就是说如果数字原先是一个正数,则右移之后在最左边补N个0;如果数字原先是个负数,则右移之后在最...
  • lxubin
  • lxubin
  • 2016年03月08日 10:23
  • 6595

C_无符号数和有符号数的左移和右移

今儿巩固下概念,转载下百度上找到的资料,加上了自己的理解,供参考 1       当左移移出的是“1”而不是0时,你该怎么想? 2       当左移的操作数是一个sign型是,你该怎么想? 3...
  • yangtalent1206
  • yangtalent1206
  • 2012年02月22日 11:58
  • 17068

c语言学习笔记(8)位运算符,++,--运算符的用法

摘要:总结了位运算符,++,--运算符的用法,给出了一个使用异或方法巧解面试题的例子,分析了贪心法的规则。 一、位运算符用法     c语言中的位运算符主要有以下几种:      ...
  • Deep_l_zh
  • Deep_l_zh
  • 2015年09月28日 17:45
  • 2340

C语言基础教学——循环结构之for循环(第四课)

C语言中的循环结构分为三类: 1、for()循环 2、while()循环 3、do while()循环 何为循环:程序自动重复某几个语句1、for()循环,最常用的循环 语法结构:for(语...
  • X0__0X
  • X0__0X
  • 2016年10月05日 09:10
  • 2410

有符号整数的移位运算

[转载] http://blog.csdn.net/e3399/article/details/7526230在c 中,左移也就是所说的逻辑移位,右端补0;而右移是算数移位,左端补的是最高位的符号位。...
  • u010186001
  • u010186001
  • 2017年04月24日 23:32
  • 446

Verilog 带符号数操作

(1)之前的笔记写过《补码探讨》,可知在FPGA综合成电路的时候最底层都是以补码的形式在运算,正数的补码就是本身,负数的补码要取反+1。 (2)那么Verilog中编程的时候对编程人员来说,其实...
  • weixin_40398288
  • weixin_40398288
  • 2017年12月12日 15:44
  • 184

关于有符号数移位问题

有符号数,正数最高位为0, 负数最高位为1    有符号数右移时正数空位填0,负数空位填1     如:-2(在内存中存储为11111111 11111111 11111111 1111111...
  • wufangna
  • wufangna
  • 2013年12月04日 13:29
  • 3217

C语言的移位操作符

C语言的移位操作符  位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。 ...
  • 21aspnet
  • 21aspnet
  • 2004年10月30日 16:36
  • 33648

ARM中移位的解释

ARM中移位的方法解释
  • Adam_boy
  • Adam_boy
  • 2010年12月19日 20:30
  • 1328
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于有符号数移位问题
举报原因:
原因补充:

(最多只允许输入30个字)