符号(位运算符,++,--,优先级和类型转换)

位运算符:&,|,^,<<,>>,~

都是基于二进制数的移动,其他进制都要转换成二进制进行

左移n位,相当于乘以2的n次方;右移n位,相当于除以2的n次方。

^:a^a=0,遵行交换律,结合律  a^b^a=a^a^b=b:如果a的个数为偶数,那么计算结果永远是b

++,--与逗号表达式的运算:

1 int x=3;
2 int y=(++x,x++,x+10);

逗号表达式的运算:从左到右,依次计算每个表达式的值,最后一个表达式的值就是逗号表达式的值

1 int i=3;
2 i+++i+++i++;

贪心法:
编译器处理的每一个字符应该尽可能多的包含字符,编译器从左到右的顺序一个一个尽可能多的读入字符,即当读入的字符不能和已经读入的字符组合合法为止。

所以上式的处理方式:(i++)+(i++)+(i++)

1 int i=1;
2 ++i+++i+++i++;

处理方式:(++i++)+(i++)+(i++)
++i++,++i=2,2++,是个错误的表达式,所以上式编译不能通过。

优先级+类型转换:

*p.f==>*(p.f)

int *ap[]==>int *(ap[])

int *fp()==> int *(fp())

==和!=优先级高于位操作符:val & mask !=0 -->val & (mask !=0)

==和!=优先级高于赋值运算符:val =getchar() !=EOF -->val = (getchar() !=EOF)

算术运算符高于位移运算符:msk<<4+sg-->msk<<(4+sg)

逗号运算优先级最低:a=1,2-->(a=1),2

c语言隐式类型转换:(先转换再执行相应的运算操作)

算术运算式中,低类型转换为高类型 (char,short-->int)

赋值表达式中,表达式的值转换为左边变量的类型

函数调用时,实参转换为形参类型

函数返回时,return表达式转换为返回值类型。

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int i = -2;
 5     unsigned int j = 1;
 6     if( (i + j) >= 0 ) //i先转换为unsigned int类型,注意负数的存储
 7     {
 8         printf("i+j>=0\n");   // i+j>=0
 9     }
10     else
11     {
12         printf("i+j<0\n");
13     }
14     printf("i+j=%d\n", i + j);  // -1,%d表示有符合的整型
15     return 0;
16 }
时间: 2024-07-30 13:46:43

符号(位运算符,++,--,优先级和类型转换)的相关文章

位运算符 优先级 折半搜索

看编程珠玑,深知二分搜索的用处之大,自己写了一遍,竟然出了死循环.代码如下: 1 int bsearch(int *data, int val,int left, int right) 2 { 3 if(left <= right) 4 { 5 int mid = left + (right-left)>>1; 6 if(data[mid]==val) 7 return mid; 8 else if(data[mid]<val) 9 return bsearch(data,val,

java注释 命名 数据类型 基本类型转换 位运算符 逻辑运算符 三目运算符

一.java注释 1.单行注释  //注释内容 2.多行注释 /*注释内容*/ 3.文档注释(可用javadoc工具生成api文档,不过我还没试过)/**文档注释*/,文档注释可以在使用的时候看见注释. 文档注释常用的标记 @auther作者 @version版本 @deprecated 不推荐使用 @param 本放的参数 @return 返回值 @throws异常,同@exception 二.java的命名 1.项目名 字母全部小写 2.包名 全部小写 3.类名 首字母大写加驼峰 4.方法名

类型转换、运算符、位运算符【以及原码、反码、补码】

1.类型转换 php中的‘+’与js有区别,php中+只是算术运算符[更偏向转化为数字].js更偏向转化为字符串 php本身的自动转换类型便符合大多数对类型的处理.[也有强制转换的情形出现] [注意转换关系:字符串转换成数字类型,开头的那部分字符串能够转化为数字(还要判断浮点型和整型)] 2.转换成布尔型[实现流程控制的关键] 以下值为false: (1)布尔值为false (2)整型值为0 (3)浮点型为0.0 (4)空字符串[字符串'0'(相当于是字符串做数组时是一个空字符串),区别,注意‘

JavaScript的位运算符、赋值运算符、其他运算符、三元运算符、运算符优先级

一. 位运算符 在一般的应用中,我们基本上用不到位运算符.虽然,它比较基于底层,性能和速度会非常好,而就是因为比较底层,使用的难度也很大,底层运算是转换成二进制进行运算的. 位运算符有七种,分别是:位非 NOT(~).位与 AND(&).位或 OR(|).位异或 XOR(^).左移(<<).有符号右移(>>).无符号右移(>>>). var box = ~25; //-26 var box = 25 & 3; //1 var box = 25 |

运算符_位运算符,其他运算符,赋值运算符,三元运算符,运算符优先级

六. 位运算符PS:在一般的应用中,我们基本上用不到位运算符.虽然,它比较基于底层,性能和速度会非常好,而就是因为比较底层,使用的难度也很大.所以,我们作为选学来对待.位运算符有七种,分别是:位非 NOT(~).位与 AND(&).位或 OR(|).位异或 XOR(^).左移(<<).有符号右移(>>).无符号右移(>>>). var box = ~25; //-26 var box = 25 & 3; //1 var box = 25 | 3;

位运算符和运算符优先级

# ###(7)位运算符: & | ~ ^ << >> var1 = 19 var2 = 15 # & 按位与 res = var1 & var2 print(res) ''' 10011 01111 00011 ''' # | 按位或 res = var1 | var2 print(res) ''' 10011 01111 11111 ''' # << 左移 """ n<<m n乘以2的m次幂 &quo

运算符和表达式(类型转换)

和其他程序设计语言一样,C语言中表示运算的符号称为运算符.运算符是告诉编译程序执行特定算术或逻辑操作的符号,运算的对象称为操作数. 对一个操作数进行运算的运算符称为单目运算符,对两个操作数进行运算的运算符称为双目运算符,三目运算符对三个操作数进行运算.用运算符和括号可以将操作数连接起来组成表达式. C语言提供了40多个运算符,其中一部分跟其他高级语言相同(例如"+"."?"."*"等运算符),另外的与汇编语言类似,对计算机的底层硬件(如指定的物理

JavaScript基础之运算符及全面的运算符优先级总结

算数运算符: 加+,减-,乘*,除/,求余%,加加++,减减--, 加减乘除求余运算与数学上的用法完全一样. 不过,加号+还有连接字符串的作用,其他运算符还可以将字符串数字转换成数值型,参见JavaScript中数据类型转换总结中的隐式转换部分. ++,--分为前置和后置,前置表示在使用该变量之前加/减1,后置表示在使用之后加/减1. 逻辑运算符: 1.&&:  与运算,  当与运算的两个内容都为true的时候,结果为true,只要有一个内容为false,结果都是false,&&a

JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)

Java基础语法(变量.常量.数据类型.运算符与数据类型转换) 1.变量 Java中,用户可以通过指定数据类型和标识符来声明变量,其基本语法为: DataType identifier; 或 DataType identifier = value; 其中,DataType是变量类型,如int/string/char/double/boolean等:identifier是变量名称,即标识符:value就是声明变量的值. 注: a.标识符由数字0-9.大小写字母.下划线.美元符号.人民币符号以及所有