DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: webb123
今日帖子: 36
在线用户: 19
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 9:26:28
标题:
进制怎么判断? 谢谢大家。 浏览:1135
加入我的收藏
楼主:   // BASS_DEVICEINFO flags
  BASS_DEVICE_ENABLED     = 1; // open
  BASS_DEVICE_DEFAULT     = 2; // select
  BASS_DEVICE_INIT        = 4; // init ...

  BASS_DEVICE_TYPE_MASK        = $ff000000;
  BASS_DEVICE_TYPE_NETWORK     = $01000000;
  BASS_DEVICE_TYPE_SPEAKERS    = $02000000;

现在的返回值(flags)是  BASS_DEVICE_TYPE_SPEAKERS + 2 + 1

我怎么写判断?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 9:44:44
1楼: if a and b = a then

刚才代码的确我写错了。现在改了。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 9:45:31
2楼: @wang_80919  没看懂。
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 hs_kill (lzl_17948876) ★☆☆☆☆ -
普通会员
2020/11/2 9:51:33
3楼: if flags and BASS_DEVICE_ENABLED = BASS_DEVICE_ENABLED then
  //包括BASS_DEVICE_ENABLED
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 9:51:39
3楼: 你的问题我也没看懂。
我猜测了一下你的问题,给的答案 可能和你的问题无关。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 hs_kill (lzl_17948876) ★☆☆☆☆ -
普通会员
2020/11/2 9:52:17
4楼: 去学习下位运算相关知识
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 10:23:11
5楼: @hs_kill 还有一个呢? 它有很多种包括。 
BASS_DEVICE_TYPE_SPEAKERS + 2 + 1
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 hs_kill (lzl_17948876) ★☆☆☆☆ -
普通会员
2020/11/2 10:25:00
6楼: 一个一个的判断啊
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 10:25:37
6楼: 现在的问题是flags = BASS_DEVICE_TYPE_SPEAKERS + BASS_DEVICE_DEFAULT + BASS_DEVICE_ENABLED

我怎么判断?  

flags = BASS_DEVICE_TYPE_SPEAKERS + BASS_DEVICE_DEFAULT
flags = BASS_DEVICE_TYPE_SPEAKERS + BASS_DEVICE_ENABLED
flags = BASS_DEVICE_TYPE_SPEAKERS + BASS_DEVICE_INIT 
flags = BASS_DEVICE_TYPE_SPEAKERS + BASS_DEVICE_INIT + BASS_DEVICE_ENABLED

。。。 无数种可能。
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 10:27:46
7楼: @hs_kill

 一个个判断, 根本无法写啊, 很多种可能。
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 hs_kill (lzl_17948876) ★☆☆☆☆ -
普通会员
2020/11/2 10:42:34
8楼: .....只判断一个啊
你的flags值不是相加的么  其实就是位操作里的or
所以无论你flags是什么  你需要判断哪个值就用flags 去and哪个值判断结果

都说了, 先去了解下位操作相关资料
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 10:50:13
9楼: 另外 不要用 + ,一定要用 OR 
否则 加多了,就错了。

必须一个一个的判断。
但是你可以吧需要判断的内容放 数组里。
写一个循环判断。


if (a[i] and b) = a[i] then
begin
  a[i] 可以干吗,我就不知道了。
end;
----------------------------------------------
(C)(P)Flying Wang
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 11:10:12
10楼: @hs_kill有没有这种写法? 

(flags || BASS_DEVICE_TYPE_SPEAKERS || BASS_DEVICE_DEFAULT)= true?

只要符合任意一种就真?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 csm55 (鹰扬天下) ★☆☆☆☆ -
盒子活跃会员
2020/11/2 11:10:27
10楼: 1个字节里有8bit, bit[0]表示有没open,bit[1]表示有没select,bit[2]有没init
如果你要判断bit[0]位是不是1,只要这样判断
if value and 1 = 1 then showmessage('bit[0]位为1')
如果你要判断bit[1]位是不是1,只要这样判断
if value and 2 = 2 then showmessage('bit[1]位为1')
如果你要判断bit[2]位是不是1,只要这样判断
if value and 4 = 4 then showmessage('bit[2]位为1')
如果你要判断 bit[0,1,2]是不是都为1,这样判断
if value and (1+2+4) = (1+2+4) then showmessage('bit[0,1,2]位为1')

and:只要两个bit位都为1时,结果才为1

好久没玩进制了,好像是这样,你自己试验下
还有一个,多个组合: 1 or 2 or 4 = 1+2+4
----------------------------------------------
——做人,为什么要过于执著?! ——做人,干嘛为难自己?! ——做人,先要相信自己。——做人,依靠自己!——做人,量力而行。——做人,记得反省自己。——做人,何妨放手一搏。——做人,要活在当下。
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 11:12:59
11楼: a[] 这个数组里放你 说的 ,只要有,就为真的,项目。不想有的,不放。

IsHas := False;
if (a[i] and b) = a[i] then
begin
  IsHas := True;
  break;
end;

if IsHas then

另外 千万不要用 +,一定要用 or 代替。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 11:17:10
12楼: if  (x or y or z) and b <> 0 then
这个也是  x y z 在 b 中有任意一个存在,就为真。

但是 从理解方面,我感觉 上一个回复,更容易。这个 就算是知道 位运算 也不一定能理解。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 11:19:34
13楼: @wang_80919 

我试试。 

其实这是bass里面的定义, 我现在是想判断设备的类型, 

  // BASS_DEVICEINFO flags
  BASS_DEVICE_ENABLED     = 1; // open
  BASS_DEVICE_DEFAULT     = 2; // select
  BASS_DEVICE_INIT        = 4; // init ...

  BASS_DEVICE_TYPE_MASK        = $ff000000;
  BASS_DEVICE_TYPE_NETWORK     = $01000000;
  BASS_DEVICE_TYPE_SPEAKERS    = $02000000;
  BASS_DEVICE_TYPE_LINE        = $03000000;
  BASS_DEVICE_TYPE_HEADPHONES  = $04000000;
  BASS_DEVICE_TYPE_MICROPHONE  = $05000000;
  BASS_DEVICE_TYPE_HEADSET     = $06000000;
  BASS_DEVICE_TYPE_HANDSET     = $07000000;
  BASS_DEVICE_TYPE_DIGITAL     = $08000000;
  BASS_DEVICE_TYPE_SPDIF       = $09000000;
  BASS_DEVICE_TYPE_HDMI        = $0a000000;
  BASS_DEVICE_TYPE_DISPLAYPORT = $40000000;
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 11:22:12
14楼: flags 返回值默认是+BASS_DEVICE_ENABLED 的, 也就是加1, 

举个例子吧。 
flags  = 31  (默认)
flags  = 33   (加了1和2)
flags  = 37   (加了1和2和4)
BASS_DEVICE_TYPE_SPEAKERS  = 30

现在就是怎么判断 flags  = BASS_DEVICE_TYPE_SPEAKERS ?

----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 11:22:39
14楼:   BASS_DEVICE_TYPE_NETWORK     = $01000000;
  BASS_DEVICE_TYPE_SPEAKERS    = $02000000;
  BASS_DEVICE_TYPE_LINE        = $03000000;

这 3 个,好像有问题。
$01 or $02 = $03

还有其他的也有这种问题。
感觉 他不是 最合适的 位运算。
比如
BASS_DEVICE_TYPE_MICROPHONE 这个设备一旦存在,
你可能同时认为
BASS_DEVICE_TYPE_HEADPHONES

BASS_DEVICE_TYPE_NETWORK
都存在。

如果设备不能 复合存在的话,建议直接 用 
if a = 某设备类型 then
如果 是可以 混合存在的。那就只能 用
if  a and 某设备类型 = 某设备类型 then

if a and (BASS_DEVICE_TYPE_HEADPHONES or BASS_DEVICE_TYPE_LINE) <> 0 then 
这时候 就可能会发生错误。
因为 BASS_DEVICE_TYPE_NETWORK 也会 得出 这个结果。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 hs_kill (lzl_17948876) ★☆☆☆☆ -
普通会员
2020/11/2 11:28:29
15楼: 他这个应该是BASS_DEVICE_TYPE_NETWORK..BASS_DEVICE_TYPE_DISPLAYPORT是设备类型,  只有唯一值

BASS_DEVICE_ENABLED BASS_DEVICE_DEFAULT BASS_DEVICE_INIT是可以叠加的

所以 如果想判断设备类型 可以使用下面的办法判断
case flags and BASS_DEVICE_TYPE_MASK of
  BASS_DEVICE_TYPE_NETWORK:
  BASS_DEVICE_TYPE_SPEAKERS:
  BASS_DEVICE_TYPE_LINE:
  BASS_DEVICE_TYPE_HEADPHONES:
  BASS_DEVICE_TYPE_MICROPHONE:
  BASS_DEVICE_TYPE_HEADSET:
  BASS_DEVICE_TYPE_HANDSET:
  BASS_DEVICE_TYPE_DIGITAL:
  BASS_DEVICE_TYPE_SPDIF:
  BASS_DEVICE_TYPE_HDMI:
  BASS_DEVICE_TYPE_DISPLAYPORT:
end


还是最开始的话, 先了解位操作相关知识, 说了半天告诉楼主怎么写 楼主还是不明白为什么要这么写
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 11:28:53
15楼: @wang_80919

有些设备是双重功能的, 比如蓝牙耳机, 就有输入功能。 

但我看设备表, 是有两个设备, 返回的flags 不一样。 
BASS_DEVICE_TYPE_HEADPHONES  = $04000000;
  BASS_DEVICE_TYPE_MICROPHONE  = $05000000;
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 11:29:45
16楼: @hs_kill

谢谢你的代码, 我试试。
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 11:32:31
16楼: 根据 两个 15 楼的 回复。
感觉 设备类型 不是 复合的。
一个设备 他的类型 就一种,用 case 或 = 都可以。但是 不能用 and 。
----------------------------------------------
(C)(P)Flying Wang
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 11:34:35
17楼: case flags and BASS_DEVICE_TYPE_MASK of
  类型1, //注意是逗号
  类型2,
  类型3: //这个是 冒号
  begin
  end;
  类型4, 类型5:
  begin
  end;
  类型6:
  begin
  end;//这里有分号。
  else //其他设备
  begin
  end;
end;
----------------------------------------------
(C)(P)Flying Wang
作者:
男 tuesdays (Tuesday) ▲▲▲▲△ -
普通会员
2020/11/2 12:57:07
18楼: @wang_80919
谢谢, 经过测试, 成功了。 

if (vt.flags and BASS_DEVICE_TYPE_MASK) = BASS_DEVICE_TYPE_LINE then

BASS_DEVICE_TYPE_LINE 其实是虚拟声卡, 名字看是输入, 其实是可以输出给它的。 
不过, 现在还有个问题, 不好区分哪个是带声音输出的。 

  BASS_DEVICE_TYPE_MASK        = $ff000000;
  BASS_DEVICE_TYPE_NETWORK     = $01000000;
  BASS_DEVICE_TYPE_SPEAKERS    = $02000000;
  BASS_DEVICE_TYPE_LINE        = $03000000;
  BASS_DEVICE_TYPE_HEADPHONES  = $04000000;
  BASS_DEVICE_TYPE_MICROPHONE  = $05000000;
  BASS_DEVICE_TYPE_HEADSET     = $06000000;
  BASS_DEVICE_TYPE_HANDSET     = $07000000;
  BASS_DEVICE_TYPE_DIGITAL     = $08000000;
  BASS_DEVICE_TYPE_SPDIF       = $09000000;
  BASS_DEVICE_TYPE_HDMI        = $0a000000;
  BASS_DEVICE_TYPE_DISPLAYPORT = $40000000;
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
男 wang_80919 (Flying Wang) ★☆☆☆☆ -
普通会员
2020/11/2 13:27:38
19楼: BASS_DEVICE_TYPE_LINE 这几个字母,哪里表达了 输入?
可能,你需要雇一个计算机英语翻译。
----------------------------------------------
(C)(P)Flying Wang
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行82.03125毫秒 RSS