程序如下:
#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;
}