关于有符号数移位问题

原创 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编译器下是算术右移,即空出的高位补符号位...

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

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

有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?

题目有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或者二级,要走上m级,共有多少走法?注:规定从一级到一级有0种走法。 给定一个正整数int n,请返回一个数,代表上楼的方式数。保证n小于等...

等价类划分(三角形问题)

 任意输入3个整数作为三角形的3条边的长度,判断三角形的类型: 第一步:划分有效等价类和无效等价类 输入条件 有效等价类 无效等价类 是...

编写安全代码:有符号数和无符号数的移位区别

本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。作者:gfree.wind...

用16进制形式输出有符号数的小问题

问题昨天在写代码的过程中,遇到了这样一个东西: 用一个signed char类型的变量读取一个16进制数0xFF,然后再将其用printf输出成%02x的形式,最后的输出结果是:FFFFFFFFD...

我还是搞不清指令本身是如何区分有符号数和无符号数!(问题汇总)

论坛的一个CSDN提问,对各方面的回答进行了汇总,答案还算比较清楚的。   一般好像是有专门的有符号数指令和无符号数指令 比如 无符号除法是 div 有符号除法是 idiv   mov ...

有符号数与无符号数的强制类型转换问题

在C语言中有符号数转化为无符号会出现一些问题,先看以下的程序例子: int main() { char ch[12] = {0xF0, 0xFF, 0xFF, 0x00, 0xF0, 0xFF...

关于java中有符号数转换成无符号数的相关问题

首先,要涉及到编码问题,需要了解到  原码  补码   反码 的概念 ————————————————————我是分割线———————————————— 在探求为何机器要使用补码之前, 让我们...

汇编语言中使用有符号数还是无符号数问题

转自点击打开链接 一、只有一个标准! 在汇编语言层面,声明变量的时候,没有 signed 和 unsignde 之分,汇编器统统,将你输入的整数字面量当作有符号数处理成补码存入到计算机中,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于有符号数移位问题
举报原因:
原因补充:

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