欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

C/CAPL 语言中位或 (|)、加 (+) 和移位 (<<) 操作符的优先级

最编程 2024-03-11 12:58:17
...

写这个博客,为了记录自己在实际开发中因为C语言的运算符模糊不清,犯的一个错误

需求:
有三个long 型变量,a = 0x11 ,b =0x22, c =0x33 ,我想 实现 d = 0x112233

以下脚本基于CAPL脚本。
错误的代码:

On key 'c'
{
  long  a,b,c,d;
  a=0x11;
  b=0x22;
  c=0x33;
  d = a <<16 + b <<8 + c ;
  write("a:0x%x",a);
  write("b:0x%x",b);
  write("c:0x%x",c);
  write("d:0x%x",d); 
}

上面代码实际输出的是 0x00,因为 “<< ”的 优先级小于 “+”的优先级 ,所以 最后 d = a << (16+0x22)<<(8+0x33) 。

正确的代码:

On key 'c'
{
  long  a,b,c,d;
  a=0x11;
  b=0x22;
  c=0x33;
  d =( a <<16 )+ (b <<8 )+ c ;
  write("a:0x%x",a);
  write("b:0x%x",b);
  write("c:0x%x",c);
  write("d:0x%x",d); 
}

另外一种正确的方式:

On key 'c'
{
  long  a,b,c,d;
  a=0x11;
  b=0x22;
  c=0x33;
  d = a <<16 | b <<8 | c ;
  write("a:0x%x",a);
  write("b:0x%x",b);
  write("c:0x%x",c);
  write("d:0x%x",d); 
}

因为 “|”的运算符优先级是小于 “<<”运算符的,故这种方式也可以得到正确的结果。

下图附上C语言的运算符优先级,其实养成一个 只要有运算就加上括号的好习惯,管它什么优先级呢。
在这里插入图片描述