c语言中,!(--x)什么意思?

2024-11-17 08:21:36
推荐回答(5个)
回答1:

C语言运算符,括号里面(---x)表示x的值减去1,相当于“x”变为“x-1”,括号外面“!”表示取反(非0数变为0,0变为1)。

除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符,比如位运算符。



扩展资料


优先级,C语言中,运算符的运算优先级共分为15 级。1 级最高,15 级最低。 在表达式中,优先级较高的先于优先级较低的进行运算。而在一个运算量两侧的运算符 优先级相同时,则按运算符的结合性所规定的结合方向处理。

结合性:C语言中各运算符的结合性分为两种,即左结合性(自左至右)和右结合性(自右至左)。例如算术运算符的结合性是自左至右,即先左后右。如有表达式x-y+z 则y 应先与“-”号结合,执行x-y 运算,然后再执行+z 的运算。这种自左至右的结合 方向就称为“左结合性”。

而自右至左的结合方向称为“右结合性”。最典型的右结合 性运算符是赋值运算符。如x=y=z,由于“=”的右结合性,应先执行y=z 再执行x=(y=z)运算。C语言运算符中有不少为右结合性,应注意区别,以避免理解错误。

优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级。所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符、条件运算符、赋值运算符。其它的都是从左至右结合。

具有最高优先级的其实并不算是真正的运算符,它们算是一类特殊的操作。()是与函数相关,[]与数组相关,而->及.是取结构成员。

其次是单目运算符,所有的单目运算符具有相同的优先级,因此在我认为的 真正的运算符中它们具有最高的优先级,又由于它们都是从右至左结合的,因此*p++与*(p++)等效是毫无疑问的。

另外在C语言里,没有前置后置之分,因为++ -- 是右结合所以右侧优先运算,表现为 "操作数后置优先级比较高" 的假象,前置和后置的区分是因为运算符重载而后加入C++的

接下来是算术运算符,*、/、%的优先级当然比+、-高了。

参考资料来源:百度百科-C语言运算符

回答2:

C语言运算符,括号里面(---x)表示x的值减去1,相当于“x”变为“x-1”,括号外面“!”表示取反(非0数变为0,0变为1)。

除了常见的三大类,算术运算符、关系运算符与逻辑运算符之外,还有一些用于完成特殊任务的运算符,比如位运算符。


扩展资料

C语言中++*x和*++x的区别

(1)“++“跟“*”的优先级一样,如果两个同时出现,运算顺序是从右往左(不是常规的从左往右)。即“++*x”即“++(*x)”,先取x的值,然后让值自加1。(地址没变,指针指向的值变了)。

(2)“*++x”即“*(++x)”,先让x的自加1,就是x的地址加上这个指针类型的步长(比如说这个指针是int类型,那它的地址+4,以此类推),然后再取x的值。(地址变了,但是值没变)

(3)另外的,int *x,“x”代表的是指针,指针即地址,*是取值符,*x就是取指针x里存的值。

参考资料来源:百度百科-C语言运算符

回答3:

在C语言中,~x代表的意思是按位取反的意思。

将x按位取反

比如x = 10101010b。

那么~x = 01010101b。

还要注意,在C语言中,还有逻辑取反符号“!”,“!x”的返回值只有0和1两种。如果x为0,则!x=1。如果x不等于0.则!x的返回值为0。

扩展资料:

c语言关键字。

signed    声明有符号类型变量

unsigned  声明无符号类型变量

struct    声明结构体变量

union     声明联合类型

enum      声明枚举类型

switch    用于开关语句

case      开关语句分支

default   开关语句中的“其他”分支

auto      声明自动变量,缺省时编译器默认为此

const     声明只读变量

static    声明静态变量

register  声明寄存器变量

回答4:

--x表示递减,相当于x=x-1
!表示逻辑非
因为--在x前面所以先对x求递减,再求逻辑非。
如果x-1=0即x=1,则 !(x-1)为真,并且x=x-1
如果x-1 !=0即x!=1,则,!(x-1)为假,并且x=x-1

回答5:

x的值先减1,再进行取反。如果非零则式子为0,0则非零