相关疑难解决方法(0)

对于非寄存器大小的操作数,shl和shr的行为是什么?

这个问题的灵感来自于我尝试回答另一个问题:将十进制/整数转换为二进制 - 它是如何以及为什么以它的方式工作?

我能找到的按位移位运算符的唯一文档说:

操作x shl y和x shr y将x的值向左或向右移位y位,其中(如果x是无符号整数)等于x乘以或除以2 ^ y; 结果与x的类型相同.例如,如果N存储值01101(十进制13),则N shl 1返回11010(十进制26).请注意,y的值以x的类型的大小为基础进行解释.因此,例如,如果x是整数,则x shl 40被解释为x sh18,因为整数是32位而40 mod 32是8.

考虑这个程序:

{$APPTYPE CONSOLE}
program BitwiseShift;
var
  u8: Byte;
  u16: Word;
  u32: LongWord;
  u64: UInt64;
begin
  u8 := $ff;
  Writeln((u8 shl 7) shr 7);
  // expects: 1 actual: 255

  u16 := $ffff;
  Writeln((u16 shl 15) shr 15);
  // expects: 1 actual: 65535

  u32 := $ffffffff;
  Writeln((u32 shl 31) shr 31);
  // expects: 1 actual: 1

  u64 := $ffffffffffffffff;
  Writeln((u64 …
Run Code Online (Sandbox Code Playgroud)

delphi

12
推荐指数
2
解决办法
1636
查看次数

标签 统计

delphi ×1