操作符笔记

  • Post author:
  • Post category:其他


程序如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>

//int main()
//{
//	int a=1;
//	int b=2;
//	///*int c=0;
//	//c=a & b;
//	//c=a ^ b;*/
//	//printf("c = %d",c);
//	//不定义临时变量,实现两个数字的交换
//	a=a ^ b;//001 010 =011
//	b=a ^ b;//011 010 =001
//	a=a ^ b;//011 001 =010
//	//printf("A=%d,B=%d",a,b);
//	printf("%d\n",sizeof(a));
//	printf("%d\n",sizeof a);//这样可以
//	//printf("%d\n",sizeof int);//这样不行
//
//	return 0;
//
//}


//求一个整数存储在内存中的二进制中1的个数,也可以求8进制中的数
//int main ()
//{
//	int a;int count=0;
//	for(;;)
//	{
//		scanf("%d",&a);
//		while(a)
//		{
//			if(a%4==2)//求4进制if(a%4==2),求2进制:if(a%2==1)
//				count++;
//			a=a/4;//这里几进制就变为几
//		}
//		printf("a存储在内存中的二进制中1的个数为%d\n",count);
//		if (a==0)
//		{
//			count=0;
//		}
//	}
//	return 0;
//}


//int main ()//求一个整数存储在内存中的二进制中1的个数的进阶方式
//{
//	int a;int count=0;int i=0;int c=0;
//	for(;;)
//	{
//		scanf("%d",&a);
//		for(i=0;i<32;i++)//为什么为32,因为int为4个字节(byte),32个比特(bit)
//		{
//			c=a & (1 << i);
//			if(c)
//				count++;//还有种 count++; a=a&(a-1);判断a是否为真
//		}
//		printf("a存储在内存中的二进制中1的个数为%d\n",count);
//		if (c==0)
//		{
//			count=0;
//		}
//	}
//	return 0;
//}

//void test1(int arr[])
//{
//	printf("%d\n", sizeof(arr));
//}
//void test2(char ch[])
//{
//	printf("%d\n", sizeof(ch));
//}
//
//int main()
//{
//	int arr[10]={0,1,2,3,4,5,6,7,8,9};//前面arr[10],只能输入10个数,
//	char ch[10]={0};
//	int a=10;
//	int x=++a;//x=11,a=11,自加,自减和原来一样,记得把后续的屏蔽
//	a=10;
//	int y=--a;//x=9,a=9
//	a=10;
//	int c=a++;//c=10,a=11
//
//	printf("a=%d,x=%d\n",a,x);
//	printf("a=%d,y=%d\n",a,y);
//
//	printf("%d\n",arr[9]);//操作只能操作到arr[9],不能操作到arr[10]
//	//printf("%d\n", sizeof(arr));//40
//	//printf("%d\n", sizeof(ch));//10
//	//test1(arr);//4数组传参数,传的是首字母,因为是首字母,数组是特数的指针,所以指针是看平台,
//	//test2(ch);//4,32位平台,就是4个字节,64位平台是8个字节
//
//}


//int main()
//{
//    int i = 0, a = 0, b = 2, c = 3, d = 4;
//    //i = a++ && ++b && d++;//1,2,3,4,因为,a取0,后续,后续必为假,所以++b,d++不执行
//
//    i = a++ || ++b || d++;//结果为1,3,3,4,因为a,b相或为真,则结果必为真,则d++不执行
//    printf("a = %d\nb = %d\nc = %d\nd =%d\ni=%d\n", a, b, c, d,i);
//
//    return 0;
//}

int main()
{
	char a = 3;//00000011 - a
	//00000000000000000000000000000011,整形提升
	//00000011 - a
	char b = 127;
	//00000000000000000000000001111111整形提升
	//01111111 - b

	char  c = a + b;
	//00000000000000000000000000000011
	//00000000000000000000000001111111
	//00000000000000000000000010000010相加
	
	//10000010 - c取8个字节
	//11111111111111111111111110000010 - 补码,整形提升
	//11111111111111111111111110000001 - 反码
	//10000000000000000000000001111110 - 原码   ,反码+1=补码
	//-126
	//发现a和b都是char类型的,都没有达到一个int的大小
	//这里就会发生整形提升

	printf("%d\n", c); //-126

	return 0;
}





版权声明:本文为weixin_48802554原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。