C 语言运算符

算术运算符

  • +:正值运算符 / 加法运算符
int x = 4 + 22;
  • -:负值运算符 / 减法运算符
int y = 61 - 23;
  • *:乘法运算符
int num = 5;
printf("%i\n", num * num); // 输出 25
  • /:除法运算符

C 语言里面的 整数除法 是整除,只会返回整数部分,丢弃小数部分。

创新互联公司自2013年创立以来,是专业互联网技术服务公司,拥有项目网站建设、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元石龙做网站,已为上家服务,为石龙各地企业和个人服务,联系电话:18980820575

float x = 6 / 4;
printf("%f\n", x); // 输出 1.000000

如果希望得到浮点数的结果,两个运算数必须至少有一个浮点数。

float x = 6.0 / 4; // 或者写成 6 / 4.0
printf("%f\n", x); // 输出 1.
  • %:取模运算符

返回两个整数相除的余数,这个运算符只能用于整数,不能用于浮点数

int x = 6 % 4; // 2

负数求模的规则是,结果的正负号由第一个运算数的正负号决定。

11 % -5 // 1
-11 % -5 // -1
-11 % 5 // -1
  • ++:自增运算符

++var是先执行自增操作,再返回操作后var的值;var++则是先返回操作前var的值,再执行自增操作。

int i = 42;
int j;

j = (i++ + 10); // i: 43 j: 52
j = (++i + 10) // i: 44 // j: 54
  • --:自减运算符

--var是先执行自减操作,再返回操作后var的值;var++则是先返回操作前var的值,再执行自减操作。

关系运算符

  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
  • == 相等运算符
  • != 不相等运算符

关系表达式通常返回01,表示真伪。0表示伪,所有非零值表示真。比如,20 > 12返回112 > 20返回0

注意,不要将相等运算符 == 写成 =

// 这个式子表示对变量 x 赋值 3,它的返回值为 3,所以 if 判断总是为真。
// 为了防止出现这种错误,可以将变量写在等号的右边。
if (x = 3) {}

多个关系运算符不宜连用。

i < j < k,通常达不到想要的结果,不是保证变量j的值在ik之间,实际执行的是 (i < j) < k

逻辑运算符

对逻辑运算符来说,任何非零值都表示真,零值表示伪。如,5 || 0返回15 && 0返回0

  • &&:短路与运算符(两侧的表达式都为真,则为真,否则为伪)。

如果左边的表达式为伪,就不再对右边的表达式求值。

if (x < 10 && y > 20)
  printf("Doing something!\n");
  • ||:短路或运算符(两侧至少有一个表达式为真,则为真,否则为伪)。

如果左边的表达式为真,就不再对右边的表达式求值。

  • !:非运算符(改变单个表达式的真伪)。

位运算符

  • :按位取反

将值的二进制按位变成相反值,0 变成 1,1 变成 0,符号位(首位)参与运算。

// 0000 0010
char a = 2; 
// 1111 1101,负数补码符号位不变,其他位取反加 1,得原码 1000 0010,结果为 -3
char b = ~ a; 
  • &:与运算

将两个值的二进制按位进行比较,返回一个新值,当两个二进制位都为 1,就返回 1,否则返回 0,符号位(首位)参与运算,与运算符 & 可以与赋值运算符 = 结合,简写成 &= 。

char a = -2; // 1111 1110 
char b = 1; // 0000 0001
char c = a & b; // 0000 0000,结果为 0
  • |:或运算

将两个值的二进制按位进行比较,返回一个新值,当两个二进制位都为 0,就返回 0,否则返回 1,符号位(首位)参与运算,或运算符 | 可以与赋值运算符 = 结合,简写成 |=。

char a = -2; // 1111 1110 
char b = 1; // 0000 0001
// 1111 1111,负数补码符号位不变,其他位取反加 1,得原码 1000 0001,结果为 -1
char c = a | b; 
  • ^:异或运算

将两个值的二进制按位进行比较,返回一个新值,当两个二进制位不同时,就返回 1,否则返回 0,符号位(首位)参与运算,异或运算符 ^可以与赋值运算符 = 结合,简写成 ^=。

char a = -2; // 1111 1110 
char b = 1; // 0000 0001
// 1111 1111,负数补码符号位不变,其他位取反加 1,得原码 1000 0001,结果为 -1
char c = a ^ b; 
  • <<:左移运算

将左侧运算数的二进制向左移动指定的位数,头部无法容纳的值丢弃,尾部空出来的位置使用 0 填充,符号位(首位)参与运算,左移运算符 << 可以与赋值运算符 = 结合,简写成 <<=。

char a = 1; // 0000 0001
a = a << 2; // 0000 0100,结果为 4

char b = 33; // 0010 0001
// 1000 0100,负数补码符号位不变,其他位取反加 1,得原码 1111 1100,结果为 -124
b = b << 2;
  • >>:右移运算

将左侧运算数的二进制向右移动指定的位数,尾部无法容纳的值丢弃,头部空出来的位置,使用符号位填充。

右移运算符最好不要用于负数,因为不同系统对于右移后如何处理负数的符号位,有不同的做法,可能会得到不一样的结果。

右移运算符 >> 可以与赋值运算符 = 结合,简写成 >>=。

char a = 4; // 0000 0100
a = a >> 2; // 0000 0001,结果为 1

运算符优先级

部分运算符的优先级顺序(按照优先级从高到低排列)。

  • 圆括号(()
  • 自增运算符(++),自减运算符(--
  • 一元运算符(+-
  • 乘法(*),除法(/
  • 加法(+),减法(-
  • 关系运算符(<>等)
  • 赋值运算符(=

如果两个运算符优先级相同,则根据运算符是左结合,还是右结合,决定执行顺序。大部分运算符是左结合(从左到右执行),少数运算符是右结合(从右到左执行),比如赋值运算符(=)。

参考: C 语言教程


文章名称:C 语言运算符
地址分享:http://hbruida.cn/article/dsoigic.html