>右移操作符 左移和右移移动的均为存储在内存中的二进制数的补码,整数的二进制数有原码,反码,补码,正数的原反补码相同," />

飞道的博客

c语言操作符详解,算术操作符,移位操作符,位操作符,复合操作符,单目操作符,逻辑操作符

333人阅读  评论(0)

算数操作符

+ - * /

1 .对于除法来说,操作符两侧为整数,执行整数除法,有小数舍去,而只要有浮点数则执行浮点数除法

printf("%f", 5 / 2.0);

此时%d改为%f,输出结果为2.500000

2 %操作法两侧必须为整数

移位操作符

<<左移操作符
>>右移操作符

左移和右移移动的均为存储在内存中的二进制数的补码,整数的二进制数有原码,反码,补码,正数的原反补码相同,负数需计算

左移操作符

	int a=5;
	int b = a << 1;
	printf("%d", b);

整数是4个字节,32比特位,所以a的存储为00000000000000000000000000000101
左移操作符:左边丢弃,右边补0,a<<1,即向左移1位
即b内存存储为00000000000000000000000000001010
b为10

右移操作符分两种
算术右移:右边丢弃,左边补原来的符号位
逻辑右移:右边丢弃,左边补0
一般电脑为算术右移

	int a=5;
	int b = a >> 1;
	printf("%d", b);

a的存储为00000000000000000000000000000101
a进行操作后得到b的存储为00000000000000000000000000000010,
即b为2

小结:0的左移右移均为0
正数左移为乘以2的移位数次方,3左移3,即3乘以2的3次方,3乘以8为24,正数右移即为除以2的移位数次方,小数约去
负数左移为乘以2的移位数次方,负数右移即为除以2的移位数次方,小数部分转化为-1加上原先整数部分,有一例外为-1右移均为-1

位操作符

    int a = 3;
  	int b = 5;
	int c = a&b;
	int d = a | b;
	int e = a^b;

& ——按位与
a的二进制00000000000000000000000000000011
b的二进制00000000000000000000000000000101
上下依次对应均为1时为1,否则为0
c的内存存储为00000000000000000000000000000001
所以c为1
|——按位或
上下依次对应有1时即为1,否则为0
d的内存存储为00000000000000000000000000000111
所以d为7

^ ——按位异或
上下相同为0,不同为1
e内存存储为00000000000000000000000000000110
即e为6
将a和b两个数不使用第三个变量交换两个数的值可使用异或操作符

	int a = 3;
	int b = 5;
	a = a^b;
	b = a^b;
	a = a^b;

复合操作符

+=
a+=5 意思即为a=a+5
(还有很多,表达的意思相同)

单目操作符

	!         逻辑反操作
	~          对一个数的二进制数按位取反
	sizeof     计数操作数的类型长度,以字节为单位
	*          间接访问操作符(解引用操作符)
   ()        强制类型转换
    &          取地址操作符   

sizeof需注意两点
sizeof(数组名) 数组名表示整个数组的地址,sizeof计算的是整个数组的大小
另外sizeof()括号中的表达式计算完以后只对sizeof起作用,对后续是没有影响的

	int a = 3;
	int b = 5;
	int c = 2;
	printf("%d\n", sizeof(c = a + b));
	printf("%d", c);

此时输出的c依然为2

逻辑操作符

&& 均为真最后结果才为真
||有一个结果为真即为真
对于&&操作符,左边如果为真,右边不再计算

三目操作符

exp1 ? exp2 : exp3
当exp1的计算结果为真,结果为exp2的计算结果
exp1的计算结果为假时,结果为exp3的计算结果

逗号表达式

exp1,exp2,exp3,…expn
从左到右依次计算,整个表达式的最后结果为最后一个表达式的结果


转载:https://blog.csdn.net/qq_51419689/article/details/114241976
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场