c/c++基础知识

字节的存储顺序

#include<stdio.h>
#include<stdlib.h>

int main()
{
	short num = 1;
	if (*((char *)&num) == 1)   //将num地址强制转换成char类型,占一个字节,short占两个字节
	{
		printf("低字节往前,高字节往后");
	}
	else
	{
		printf("低字节往后,高字节往前");
	}
	system("pause");
	return 0;
}

原码反码补码

计算机的原码用于表示,有符号的前提最高位为符号位,0为正数,1代表负数,其余各位为数值本身的绝对值,无符号就是数据的绝对值
反码:
正数,反码与原码相同
负数,符号位为1,其余为对原码取反
补码:
原码,反码。补码相同
负数,最高位为1,其余位对原码取反在加1,即对反码加一
在计算机系统中,数值一律用补码来表示(存储)(正数,原码补码都一样,可以理解成按原码来解析,负数一律按补码来表示)
两个补码相加,若是最高位(符号位)有进位,则进位被舍弃
原因:使用补码,可以将符号位和其它位统一处理:同时,减法也可按加法处理。

#include<stdio.h>

int main()
{
	int x = -1;
	printf("%x", &x);
	printf("\n %d%u");%d按照有符号十进制打印,%u按照无符号十进制打印
}

	//-1
	//int 4个字节,32位
	//1000 0000 0000 0000 0000 0000 0000 0001   -1的原码
	//1111 1111 1111 1111 1111 1111 1111 1110   -1的反码
	//1111 1111 1111 1111 1111 1111 1111 1111   -1的补码
	// f        f		 f		 f		 f		 f		 f		 f**
#include<stdio.h>
#include<limits.h>

int main()
{
	unsigned int x = -1;
	unsigned int y = 4294967295;
	printf("%d%d\n",INT_MAX,INT_MIN);
	printf("%u%d\n",UINT_MAX,0);
	//x和y不在usigned的范围内,unsigned int的值是正数,赋值号的本质就是二进制的拷贝。
	//无符号的数据范围要比有符号的数据范围大,是因为有符号的的最左值代表符号位,0为正,1为负,有31个1
	//而无符号的取值范围是它本身
	printf("%d,%u\n",x,x);
	printf("%d,%u\n",y,y);

	//打印结果为
	/*	 2147483647		-2147483648
		 42949672950
		-1,4294967295
		-1,4294967295*/
	getchar();
	return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

咦,今天也要写博客哦

您的支持就是对我最大的鼓励!

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

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

打赏作者

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

抵扣说明:

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

余额充值