----------内存--------------
#include<stdio.h>
void main1()
{
printf("%d\n", 10.3);//-1717986918
printf("%f\n", 10);//0.000000
//printf不管什么数据,按照%d,%f解析数据
printf("%d\n", (int)10.3);//10
printf("%f\n", (float)10);//10.000000
getchar();
}
void main2()
{
int num = 100;
printf("%p", &num);//不一样的解析方式结果不一样
getchar();
}
void main3()
{
char ch = 1;
char ch1 = '1';//字符和编号的区别
printf("%d,%d", ch,ch1);//1,49
getchar();
}
void main4()
{
//解析的时候,与数据长度有关系
//unsigned short num = 65535;
//printf("我有%d元钱\n", num);//65535
unsigned short num = 65535+1;
printf("我有%d元钱\n", num);//0
//数据的溢出
getchar();
}
void main5()
{
//补码,计算机储存数据的方式
short n = -1;
printf("%d\n", n);//-1
printf("%u\n", n);//4294967295,%u 0-正整数
getchar();
}
-----------计算机补码--------------
#include<stdio.h>
#include<stdlib.h>
#include<limits.h>//极限
void main6()
{
int x = 1;
int y = -1;//补码
printf("x=%p,y=%p", &x, &y);
getchar();
}
void main7()
{
//int,unsigned int都是4个字节32位
//三位数十进制最小000,最大999
//二进制无符号最大值32个1,整数,都是数据
//有符号,0代表整数,1代表负数,少一位用来代表符号
printf("%d,%d\n", INT_MAX, INT_MIN);//%d只能显示极限内的数字
printf("%u,%u\n", UINT_MAX, 0);
getchar();
}
void main8()
{
int q = 4294967295;
int e = -1;
//1111 1111 1111 1111 1111 1111 1111 1111内存的储存方式
//无符号,没有符号位,全部都是数据4294967295
//0000 0000 0000 0000 0000 0000 0000 0001 1的源码
//1000 0000 0000 0000 0000 0000 0000 0001 -1的源码
//1111 1111 1111 1111 1111 1111 1111 1110 -1的反码(符号位不变,其他1变0,0变1)
//1111 1111 1111 1111 1111 1111 1111 1111 -1的补码,反码+1
//在计算机里负数是按照补码存放的
printf("%d,%u\n", q,q);//-1,4294967295,有符号位和无符号位的区别
printf("%d,%u\n", e, e);//-1,4294967295
//%d,第一位抓取当符号,%u全是数据
getchar();
}
void main()
{
unsigned int num = -1;
printf("%d,%u", num, num);//-1,4294967295
getchar();
}
-------补码实战-------------
//任意输入int类型数据,打印内存的二进制储存
void mainA()
{
//int类型占4个字节,四个字节32位
int num;
scanf_s("%d", &num);
printf("\nnum=%d,&num=%p\n", num, &num);
int data = 1 << 31;//构建一个相与的数据,1左移31,1前面填充31个0
//如果要求源码,需要加一个步骤
//if (num < 0)
//{
//num = ~num + 1;//求源码 ~是取反码 源码=反码取反再+1
//num=num|data;//设置符号位
//}
for (int i = 1; i <= 32; i++)
{
if ((num&data) == 0)
{
putchar('0');
}
else
{
putchar('1');
}
num <<= 1;
if (i % 4 == 0)
{
printf(" ");
}
}
system("pause");
}
//&可以清零某些指定位数
位操作与二进制学习
最新推荐文章于 2024-08-15 15:06:51 发布