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

虚位移原理正负号确定



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

为了理解方便,假设 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

版权声明


相关文章:

  • ue将dos转换为unix2024-11-26 10:30:00
  • 软件安全测试方法2024-11-26 10:30:00
  • c语言中左移运算符怎么用2024-11-26 10:30:00
  • linux getopt函数2024-11-26 10:30:00
  • 极大似然估计概念2024-11-26 10:30:00
  • 双硬盘系统装在哪个盘2024-11-26 10:30:00
  • 动态内存拓展技术2024-11-26 10:30:00
  • 远程输出叫什么2024-11-26 10:30:00
  • matlab uint8类型2024-11-26 10:30:00
  • java内部类有什么作用2024-11-26 10:30:00