c语言无符号整型右移,c语言 java 有符号数,无符号数. 左移,右移运算

1: c语言区分有符号数,无符号数.有符号数是符号位在首位,无符号数首位就是普通位数. java只有有符号数,换句话说java二进制中首位都是符号位.0正1负.

2: 左移在所有语言中只是左移,不存在有符号无符号左移的说法,也不存在算数左移,逻辑左移的说法.算数移动(又叫有符号移动),逻辑移动(又叫无符号移动)都是指的右移,左移只有一种.

3: 先说左移

①: java中左移(java只支持有符号数). 首位不变,从第二位开始整体左移,右边补0,左边的扔掉.

当左移的运算数是int 类型时,每移动1位它的第31位就要被移出并且丢弃.当左移的运算数是long 类型时,每移动1位它的第63位就要被移出

并且丢弃.

②: c中的左移分为有符号数无符号数, 无符号数很简单,就是整体左移,左边扔点,右边补0.  有符号数的左移与上面说的java中的有符号左移类似.

③: 左移的数学意义.在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方.

4: 再说右移: c中区分有符号数与无符号数,java只有有符号数.有符号数的右移区分有符号右移(算数右移)和无符号右移(逻辑右移).java只支持有符号

右移.所以不单独说,只说c的就可以了.

①: c语言中的无符号数只能是逻辑右移.没有符号位,也就不存在算数右移(有符号右移)的情况.计算非常简单.右移一位就是除2.

②: c语言中的有符号数可以算数右移也可以逻辑右移. 与java相似,java中的数字算数右移是>>,逻辑右移是>>>. C中多数机器都是有符号

右移.

③: 对于有符号数的算数右移的方法是: 所有位数整体右移(包括符号位),每移动一位在最左边增加一个符号位(正数0负数1),最右边丢弃一位

经过测试,正数每算数右移一位就是除2. 负数的话不是除2.只是很相近而已.

④: 对于有符数的逻辑右移的方法是: 所有位数整体右移.高位补0. 测试情况:正数的情况下每逻辑右移一位就是除2.负数情况下,逻辑右移变正数

不具备数学意义.

总结: 对开发的影响是:

①: 左移在不溢出的情况下.正负数都是左移一位乘以2.

②: 右移:算数右移和逻辑右移:负数基本都没有实际意义,只有正数有意义,右移一位相当于除以2

原文:https://www.cnblogs.com/wangzhaosheng/p/13125992.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值