delphi的位操作相关问题 ( 积分: 200 )

  • 主题发起人 主题发起人 wanderld
  • 开始时间 开始时间
W

wanderld

Unregistered / Unconfirmed
GUEST, unregistred user!
如何求2的n次方,用位操作实现。注power函数不好用,power函数要求必须是浮点型,并且经常莫名其妙出错
2进制的数据如何输入,就像16进制可以使用$开头一样
如何得到一个int64类型数据(视为2进制)的第一位不为0的位数.如对于$FFFFFFFFFFFFFFFF的第一个不为0的位数为1,$7FFFFFFFFFFFFFFFFFFF第一个不为0的位数为2,希望不用太多编程
 
如何求2的n次方,用位操作实现。注power函数不好用,power函数要求必须是浮点型,并且经常莫名其妙出错
2进制的数据如何输入,就像16进制可以使用$开头一样
如何得到一个int64类型数据(视为2进制)的第一位不为0的位数.如对于$FFFFFFFFFFFFFFFF的第一个不为0的位数为1,$7FFFFFFFFFFFFFFFFFFF第一个不为0的位数为2,希望不用太多编程
 
1 shl n
这就是2的n次方了啦!哈哈。。。。
 
1:
2 的N次方?
如: 2^3
result := 1 shl 3 ;
结果为8
2:
判断某位是否为0,的方法为:x and 1 如果为0 说明x就是0了。
程序代码不用我写了吧, 把那个大的数与2^Y作 and 操作就可以了。
如:
n:=$ffaff;//一共20位的二进制
  for i:= 19do
wn to 0do
beign
if ( n and (1 shl i) )=0 then
begin
showmessage('第 '+inttostr(20-i)+' 位为 0 ');
break;
end;
end;
 
//对,现在我知道直接表示十六进制用$ ,那么请问八进制与二进制
很遗憾的告诉你,不行:(
 
多人接受答案了。
 
如何求2的n次方,突然发现对于2 shl n,n>31时就无法计算了,如
var k:int64
begin
k:=(1 shl 33);
showmessage(inttostr(k));
end;
结果是2
 
后退
顶部