c语言 *** 作符

c语言 *** 作符,第1张

c语言 *** 作符

数据在内存中是以二进制的形式存放的。

一个字节由八位二进制位组成

一个二进制位由0.1两种状态表示

例:一个int在内存中占4个字节=32位

一.移位 *** 作符

1.左移运算符<<

左边抛弃,右边补0,正数和负数不一样

int main()
{
    //正数
	int a = 5;
	int b = a << 1;

    //负数
	int a = -5;
	int b = a << 1;
	printf("%d",b);

}
-5的原码是100000000000000000000000000/0101
    反码是111111111111111111111111111/1010
    补码是111111111111111111111111111/1011
         11111111111111111111111111/10110       //将补码左移一位

再将补码转化成原码

 

 

2.右移运算符>>,分为算术右移和逻辑右移

当为正数时,最高位一般补0;当为负数时,补0还是1,取决于编译系统的决定

int main()
{
	int x = 30, y = -30;
	x = x >> 3;
	y = y >> 3;
	
	printf("%d %d",x,y);

}
-30的原码100000000000000000000000/0001 1110
     反码111111111111111111111111/1110 0001
     补码111111111111111111111111/1110 0010
            111111111111111111111111/1110 0/010
         111111111111111111111111111/1110 0
二. 

 

 &:两个都为1,才为1;否则为0;

|:只要一个为1,就为1;

^:相异为1;相同为0;

面试题:
不能创建临时变量(第三个变量),实现两个数的交换

int main()
{
	int a = 10;
	int b = 20;
	a = a + b;
	b = a - b;
	a = a - b;
	printf("%d %d",a,b);
	return 0;
}
int main()
{
int a = 10;
int b = 20;
a = a^b;
b = a^b;
a = a^b;
printf("a = %d b = %dn", a, b);
retunrn 0;
}

练习:
编写代码实现:求一个整数存储在内存中的二进制中1的个数

1的补码:00000000000000000000000000000001

                00000000000000000000000000001101

思路:利用for循环,每次>>左移,然后按位与&1

int main()
{
	int a = 0;
	scanf_s("%d",&a);
	int count = 0;
	int i;
	for ( i = 0; i < 32; i++)
	{
		
		if (1==((a>>i)&1))
		{
			count++;
		}
	}
	printf("%d",count);
}
 三.

sizeof可以求变量(类型)所占空间的大小(单位字节)

#include 
void test1(int*arr)
{
printf("%dn", sizeof(arr));//(2)
}
void test2(char*ch)
{
printf("%dn", sizeof(ch));//(4)
}
int main()
{
int arr[10] = {0};
char ch[10] = {0};
printf("%dn", sizeof(arr));//(1)
printf("%dn", sizeof(ch));//(3)
test1(arr);
test2(ch);
return 0;
}
问:
(1)、(3)两个地方分别输出多少?40 10
(2)、(4)两个地方分别输出多少?4   4/8  地址
四.360笔试题
include 
int main()
{
  int i = 0,a=0,b=2,c =3,d=4;
  i = a++ && ++b && d++;

  printf("a = %dn b = %dn c = %dnd = %dn", a, b, c, d);

  return 0;
}
//程序输出的结果是什么?
a=0为假--只要有一个为假其余都是假,不用算了
而a++为后置,算完a&&++b后再自增
答案:1 2 3 4

 

2 3 3 5 

2 2 3 4 

 ||:两个表达式都为假时,逻辑运算结果为假

       只要一个为真,结果为真

&&:两个表达式都为真时,结果才为真

        只要一个为假,结果就为假

  逗号表达式

value=2+5,1+2,5+7;    7
value=(2+5,1+2,5+7);  12
赋值运算符优先级比逗号表达式高
 五.整形提升

隐式类型转换之整形提升_rain67的博客-CSDN博客

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5718405.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存