#define _CRT_SECURE_NO_WARNINGS 1
//求两个数二进制中不同位的个数
//要求:实现两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同
//例子:输入:1999 2299 输出:7
//
//普通·版
//#include
//int main()
//{
// int m = 22;//初始值即为输入值,可更改
// int n = 33;
// int i = 0;
// int count = 0;
// for (i = 0; i < 32; i++)
// {
// if (((n >> i) & 1 )!= ((m >> i) & 1))
// {
// count++;
// }
// }
// printf("%d\n", count);//打印结果为5
// return 0;
//}
//进阶版
//m^n(异或),相同为0.相异为1
//#include
//int retu(int n)
//{
// int count = 0;
// int i = 0;
// while (n)
// {
// n = n & (n - 1);
// count++;
// }
// return count++;
//}
//int main()
//{
// int m = 22;
// int n = 33;
// int count = 0;
// int i = 0;
// scanf("%d %d", &m, &n);
// int ret = m ^ n;//相同为0,相异为1
// count=retu(ret);
// printf("%d\n", count);
// return 0;
//}
//打印整数的二进制的奇数和偶数位(获取一个整数二进制序列中所有的偶数位和奇数位,分别打印二进制序列)
//#include
//int main()
//{
// int n = 0;
// scanf("%d", &n);//scanf("%d",&n),,,,,不能加\n
// int i = 0;
// //打印所有偶数位
// for (i = 31; i >= 1; i -= 2)//for循环,使每个符合条件的位(偶数位)打印
// {
// printf("%d ", (n >> i) & 1 );//(n>>i)表示把最高位移动到最低位,然后与1按位与,打印结果
// }
// printf("\n");
// //打印所有奇数位
// for (i = 30; i >= 0; i -= 2)
// {
// printf("%d ", (n >> i) & 1);//(n>>i)表示把最高位移动到最低位,然后与1按位与,打印结果
// }
// return 0;
//}
//交换两个变量,不创建临时变量
//思路:a^b^b=a; (放在a里,就交换a,b) a^b^a=b;(放在a里,就交换a,b)
//#include
//int main()
//{
// int a = 0;
// int b = 0;
// scanf("%d %d", &a, &b);
// a = a ^ b;//a放置的是a^b
// b = a ^ b;//b=a^b=a^b^b=a,,,,b变成原来的a
// a = a ^ b;//a=a^b^a=b,,,,a变为原来的b
// printf("%d %d ", a, b);
// return 0;
//}
//表达式求值先看是否存在整形提升或算术运算,再进行计算
//表达式真正计算时,先看相邻 *** 作符的优先级决定先算谁
//相邻 *** 作符的优先级相同的情况下,看 *** 作符的结合性决定计算顺序
//即使有优先级和结合性,表达式的值依然可能不唯一//如int ret=(++i)+(++i)+(++i);计算顺序可能是++i ++i ++i 4+4 8+4 也可能是++i ++i 3+3 ++i 6+4
//
//指针是变量,用来存放地址,指针变量中存的有效地址可以唯一指向内存中的一块区域
// 局部变量不初始化就是野指针,野指针不能被正常使用
//以下系统中,int类型占几个字节,指针占几个字节, *** 作系统可以使用的最大内存空间是多大
//32位下:4 4 2^32(每个字节有0,1....共32个字节) 64位下:4 8 2^64
//例题,求下面代码的值
#include
int main()
{
int arr[] = { 1,2,3,4,5 };//short型访问两个字节
short* p = (short*)arr;//把数组给了short型的指针,并把short型指针交给p
int i = 0;
for (i = 0; i < 4; i++)
{
*(p + i) = 0;//p是short型指针,p+0不跳过字节,是从01 00的0开始,p+1跳过2个字节
}
//10进制:1 二进制:00000000000000000000000000000001 十六进制00 00 00 01
//把十六进制1-5各个数存在内存中(vs内是倒着存)小端存储为
//01 00 00 00(四个字节)02 00 00 0(四个字节)03 00 00 00(四个字节)04 00 00 00(四个字节) 05 00 00 00(四个字节)
//第一次for循环,p+0不跳过字节,是从01 00的0开始,更改对象01 00,变为00 00(此时i++=1)
//第二次for循环,p+1跳过二字节,是从00 00的0开始,更改对象00 00,变为00 00(此时i++=2)
//第三次for循环,p+2跳过四字节,是从02 00的0开始,更改对象02 00,变为00 00(此时i++=3)
//第四次for循环,p+3跳过六字节,是从00 00的0开始,更改对象00 00,变为00 00(此时i++=4,跳出循环)
//一次改两个字节,改了4次,八个字节,两个整形,把1和2的空间全部改为0
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);//以数组类型访问并打印,(4个字节)
}//打印结果为0 0 3 4 5
//第二次for循环只是为了打印修改后的值
return 0;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)