当前位置:网站首页 > 技术博客 > 正文

虚位移原理正负号确定



  • 移运算符 << :把一个数的所有位都向左移动若干位
 

为了理解方便,假设 int 占1个字节(8位,实际32位机器占4字节,32位)

 

此时需要注意的是 int 类型 最左端的符号位
0 表示
1 表示

 

当左移的位数超过该数值类型的最大位数时,编译器会用左移的位数去模类型的最大位数,然后按余数进行移位,如:

 

总结:丢弃高位,0补低位

  • 移运算符 >> :把一个数的所有位都向左移动若干位

符号位向右移动后,正数补0负数补1,也就是汇编语言中的算术右移,同样当移动的位数超过类型的长度时,会取余数,余数是几,移动几位

整型 int 为4个字节32位,那么当我们右移32位会发生什么?35位呢?

 
 

这是因为位移是一个取模的过程
当我们右移4位:4 % 32 = 4
当我们右移32位:32 % 32 = 0 也就是不动
那么当右移33位,那不就是右移1位吗!

  • 无符号右移(没有无符号左移)

无符号右移在右移时,高位补0,也就是不会管你是不是负数
-10 >>> 1
二进制: 0 | 0
是这样吗?答案是对的,负数无符号右移,高位同样补0
无符号右移1位后最高位的1变为了0,负数变为了正数

总结
负数右移高位补1
无符号负数高位补0

eg 小测验:

 
 
  • 总结
码制添补代码正数原码、补码、反码0负数原码0补码左移添0右移添1反码1

版权声明


相关文章:

  • mysql数据库的设计与实现2024-11-26 10:30:00
  • 召回率百科2024-11-26 10:30:00
  • i2c通信的详细讲解2024-11-26 10:30:00
  • 怎么更新usb驱动程序2024-11-26 10:30:00
  • ue将dos转换为unix2024-11-26 10:30:00
  • xss跨站脚本漏洞解决方案2024-11-26 10:30:00
  • 双硬盘系统装在哪个盘2024-11-26 10:30:00
  • 批处理文件命令大全2024-11-26 10:30:00
  • java项目实例讲解2024-11-26 10:30:00
  • jupyter怎么安装tensorflow2024-11-26 10:30:00