c语言恒等于一个字符串怎么弄,c语言的基础学习

操作符 运算符

(1)算术运算符

+ - * / %

(1)越界(数据溢出)

(2)同类型数据计算结果类型不变

整数类型除法 相当于 整除(截取整数部分的结果)

(3)0不能作为除数 浮点类型除外 0.0

(4)% 取余 操作数不能是浮点数 编译通不过

类型混合运算:自动扩充

char->short->int->long->float->double

signed + unsigned ==> unsigned

char->int 8bit扩充成32bit 24补char的最高位

(2)赋值运算符

=

混合赋值

+= -= *= /= %=

a += 20; ==> a = a+20; a/=3; a = a/3;

a =+ 20;

(3)自增减运算符

++ - -

int z = x++; // z=x; x=x+1;

int z = ++x; // x=x+1; z=x;

前加加(减减) 先自增(减),然后再运算

后加加(减减) 先运算,然后再自增(减)

int y = x++ + ++x;

x = x++ + ++x;

(i)不要在同一个表达式中对同一个变量进行多次自增减运算

(ii)浮点类型数据可以进行++ - -,但很少用

(4)关系运算符

> >= < <= == !=

>= 大于或者等于

=>

数学逻辑

重要: 关系表达式的结果是 1 或者 0

一个关系,两种情况 成立(真 1) 不成立(假 0)

注意:

(1) 关系表达式结合是从左往右 1

(1

在语言中 x

并且C语言不会编译成 y 在(x,z)中间

(x

(2) 一个=和两个=

判断是否相等 一定要有 两个 =

int x = 0;

if(x=0){

//永远不会执行

}

if(x0){}

if(x=v){

(v非0时执行)

}else{

v为0时执行

}

(3) i (i

比较运算符优先级高于 判等 运算符

如果要行判断相等得加() i

(5)逻辑运算符

&& || !

逻辑表达式的结果是 1 或者 0

在C语言中表示真 和 假

假值: 0 (-0.0000001,0.0000001) NULL

真值: 非"零"

逻辑: 真 或者 假

&& 逻辑与 两者都成立才为真 而且

真&&真 真

真&&假 假

假&&真 假

假&&假 假

|| 逻辑或 或者 只要满足其中之一即为真

真||真 真

真||假 真

假||真 真

假||假 假

! 逻辑非

!真 假

!假 真

判断 x是否在 (1,10)区间

1

1 如果 x>1 而且 x<10 成立

注意:

(i) x>1 && x<10

关系运算符优先级高于逻辑运算符

逻辑运算符经常用于 连接 多个 关系表达式

(ii) 短路特性

假&&表达式 恒为假 后面表达式的结果无论是真或者假都无法改变整个逻辑表

达式的结果,后面表达式将不再进行运算 这种现象称为短路特性

真||表达式 恒为真

表达式不能影响结果,所以不再进行运算

(iii) && 结合性优先级 高于 ||

int a=1,b=1,c=1;

int x = ++a>1||++b>1&&++c>1;

++a>1||(++b>1&&++c>1);

(6)位运算符

按位进行运算

& | ^ ~ >> <<

& 按位与

二进制0或者1

1&1 = 1

1&0 = 0

0&1 = 0

0&0 = 0

14&8 = 8

0000 111

0101001001010 num

| 按位或

二进制位0或者1

1|1 = 1

1|0 = 1

0|1 = 1

0|0 = 0

14|8 = 14

0000 1110

0000 1000

-------------

0000 1110

-15|12

1111 0001 -15

0000 1100

----------

1111 1101 = -3

10010101010 num

00000000000

-------------

10010101010 num

^ 按位异或 异1 二进制位不同则为1

二进制位0或者1

1^1 = 0

1^0 = 1

0^1 = 1

0^0 = 0

14^8 = 6

0000 1110

0000 1000

----------

0000 0110

-15^12 =

1111 0001

0000 1100

----------

1111 1101 = -3

-7^9 =

1111 1001

0000 1001

----------

1111 0000 = -16

101000101 num

000000000 ^

-----------

101000101 num

推论(整数):

-1 & num == num

0 & num == 0

-1 | num == -1

0 | num == num

0 ^ num == num

-1 ^ num == ~num == -(num+1)

负数补码:

~num+1 = -num;

~num = -num-1;

~num = -(num+1);

~ 按位取反

二进制位0或者1

~0 = 1

~1 = 0

整数:

~0 = -1

~-1 = 0

~num = -(num+1);

负数求补码:

~num+1 = -num; ==> ~num = -(num+1);

char c = 234;

int x = ~c;// 21

unsigned char a = 234

int y = ~c;// -235

“>>” 右移

右边移出的位舍弃 如果是有符号(signed)的数 补符号位

如果是无符号(unsigned)的数 补0

除了负的奇数 每向右移一位 相当于除以2

"<< " 左移

左边移出的位舍弃 右边补0

每向左移一位 相当于乘以2

注意:

(i) 算术优先级高于 移位运算符

234>>1+3 ==> 234>>(1+3) ==> 234>>4

嵌入式里最经典的问题:

把num从低到高 第3个二进制位 置1 其它的位不变

num = 0x4 | num;

num = 1<<2 | num;

把num第5个二进制位 置0 其它的位不变

num = ~(1<<4) & num;

假设x和y都是正整数

求 (x&y)+((x^y)>>1)

两个人: 苹果和香蕉

x&y 求相同的二进制位

x^y 求二进制不同的位

>> 1 除以2

(7)条件运算符 三目运算符

?:

expr?expr1:expr2

expr1和expr2两个式子 只会执行其中之一

如果expr的结果为真 则取expr1的结果,否则取expr2的结果

(8)sizeof

(i)运算符 不是函数

(ii) sizeof(操作数)

操作数可以是变量、数值、类型、表达式

(iii) 计算存储数据或者类型或者表达式的结果需要的字节数

(iv) 只关心类型 不计算表达式

(v) 对于类型 不能省略()

sizeof(long) 4/8

int i = 0;

sizeof(++i) i的值不变 ++i不会运行

sizeof(混合类型表达式) 宽度最大的字节类型的大小

浮点数字面值默认是double类型,如果要表示float的浮点字面值需要加f/F

sizeof(3.14+5/2);//8

sizeof(3.14f+5/2);//4

char a = 1,b = 2;

sizeof(a+b);//4 char在算术运算时扩充成int类型

(9)其它

& 取址运算符 取得变量的地址

, 分隔作用 表示一条语句

() 优先级

[] 数组元素访问运算符

. 成员访问运算符

* 取值运算符

-> 结构体指针访问成员运算符

() 来限定优先级


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部