C语言:指针探讨

本文探讨了C语言中的位操作,通过实例解释了如何使用异或操作实现数值交换,同时还涉及到了指针的使用,展示了如何通过指针进行变量交换。虽然文章没有完整展示Swap函数的实现,但提到了指针在函数参数中的应用。
摘要由CSDN通过智能技术生成

#include <stdio.h>

// void Swap(int *p1,int *p2);

int main(int argc, char const *argv[])
{

//正数的反码补码相同;
//负数,符号位不变,反码取反,补码取反加1(也就是反码+1)
// int a;
// int b;
// int *p1 = &a;
// int *p2 = &b;
// printf("请输入两个数字,交换:\n");
// scanf("%d %d",p1,p2);
// Swap(p1,p2);
// printf("%d %d\n",*p1,*p2);
// int c = 10;
// printf("C = %d\n",c += c -= c *= 1);

/*
a 5 :0101
b 4 :0100
a ^ b ^ b = a
a ^ b ^ a

a = -6

a = 1000 0110;
fan : 1111 1001;
补: ;1111 1001 = 64 32 16 8 1

a = a ^ b;
b = a ^ b; a ^ b ^ b;
a = a ^ b; a ^ a ^ b;

temp=a^b :0001
temp^a :0101: a;
temp^b :0101 a;

10的取反:-10的取反;

源码:0000 1010,

-10;绝对值 10:0000 1010;1111 0101;+1

-42:绝对值补码:0010 1010;取反:1101 0101

0000 0111
1111 1000;fushu yuanma

1000 0111 fanma

bufam 1000 1000;

fushu1

:-10: 1000 1010
取反:得到: 0111 0101

10 : 0000 1010
取反 :1111 0101
: 1000 1010
加1 :1000 1011

  • 11;

-10 :源码1000 1010;
取反后的源码,是个正数 : 0111 0101;

-7 : 源码 :1000 0111;
反码:1111 1000;
补码:1111 1001;

,-7,在计算机中以补码形式存在的,所以是应该对补码取反:
取反:0000 0110;

temp = a^b;
a = a ^

*/
int a = 5;
int b = 4;
int temp;
temp =a ^ b
a =
return 0;

main()
{ int a=7,b=8,*p,*q,*r;
p=&a;
q=&b;

       r=p;
       p=q;
       q=r;
       printf(“%d,%d,%d,%d\n”,*p,*q,a,b);   

}

}

// void Swap(int *p1,int *p2)
// {
// int temp;
// temp = *p1;
// *p1 = *p2;
// *p2 = temp;
// }

// a +=(a-10) 10
//10 = 10* 1

#include <stdio.h>

// void Swap(int *p1,int *p2);

int main(int argc, char const *argv[])
{
	
	//正数的反码补码相同;
	//负数,符号位不变,反码取反,补码取反加1(也就是反码+1)
	// int a;
	// int b;
	// int *p1 = &a;
	// int *p2 = &b;
	// printf("请输入两个数字,交换:\n");
	// scanf("%d %d",p1,p2);
	// Swap(p1,p2);
	// printf("%d %d\n",*p1,*p2);
	// int c = 10;
	// printf("C = %d\n",c += c -= c *= 1);



/*
	 a 5 :0101 
	 b 4 :0100
a ^ b ^ b = a
a ^ b ^ a

a = -6



a = 1000 0110;
fan : 1111 1001;
补:   ;1111 1001 = 64 32 16 8 1




a = a ^ b;
b = a ^ b;  a ^ b ^ b;
a = a ^ b;	a ^ a ^ b;

temp=a^b :0001 
temp^a   :0101:  a;
temp^b   :0101  a; 

10的取反:-10的取反;

源码:0000 1010,

-10;绝对值 10:0000 1010;1111 0101;+1

-42:绝对值补码:0010 1010;取反:1101 0101 


0000 0111
1111 1000;fushu yuanma

1000 0111 fanma

bufam 1000 1000;


fushu1

:-10:  1000 1010
	取反:得到:	0111 0101

10 : 0000 1010 
取反 :1111 0101 
:    1000 1010 
加1  :1000 1011
- 11;


-10 :源码1000 1010;
取反后的源码,是个正数 : 0111 0101;

-7 : 源码 :1000 0111;
		反码:1111 1000;
		补码:1111 1001;

,-7,在计算机中以补码形式存在的,所以是应该对补码取反:
		取反:0000 0110;













 temp = a^b;
 a = a ^  
	
*/
	int a = 5;
	int b = 4;
	int temp;
	temp =a ^ b
	a = 
	return 0;





   main()
  {   int a=7,b=8,*p,*q,*r;
           p=&a;
           q=&b;

           r=p;
           p=q;
           q=r;
           printf(%d,%d,%d,%d\n”,*p,*q,a,b);   
  }






}


// void Swap(int *p1,int *p2)
// {
// 	int temp;
// 	temp = *p1;
// 	*p1 = *p2;
// 	*p2 = temp;
// }

// a +=(a-10) 10
//10 = 10* 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叫我乂可好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值