进制之间的转换、原码--反码--补码

C基础 专栏收录该内容
11 篇文章 0 订阅

二进制、八进制、十六进制转为十进制



十进制转二进制



二进制、八进制之间的转换




二进制、十六进制之间的转换



原码、反码、补码

正数的原码、反码、补码一样( 正数以原码存储)

负数原码最高位为1,其余位为绝对值
 1000 0000 0000 0000 0000 0000 0000 0001
 负数反码最高位为1,其余位对原码取反
 1111 1111 1111 1111 1111 1111 1111 1110
 负数补码最高位为1,其余位对原码取反,在+1(负数以补码存储)
 1111 1111 1111 1111 1111 1111 1111 1111


#include<stdio.h>
#include<limits.h>

void main(){
	//sizeof不是函数,是运算符
	printf("%d\n", sizeof(char));//1个字节
	printf("%d\n", sizeof(short));//2个字节
	printf("%d\n", sizeof(int));//4个字节
	printf("%d\n", sizeof(double));//8个字节

	//%d是有符号十进制整数格式,它的最高位是符号位。0正1负
	//0111 1111 1111 1111 1111 1111 1111 1111正数字
	//1111 1111 1111 1111 1111 1111 1111 1111负数字
	printf("%d,%d\n",INT_MAX,INT_MIN);

	//%u是无符号十进制整数格式,它的最高位是有效数字
	//1111 1111 1111 1111 1111 1111 1111 1111
	printf("%u,%u", UINT_MAX, 0);
	getchar();
}

输出:

1
2
4
8
2147483647,-2147483648
4294967295,0



#include<stdio.h>
void main(){
	int x = -1;
	printf("%x\n",&x);

	//%u 无符号十进制打印,
	//其补码1111 1111 1111 1111 1111 1111 1111 1111所以十进制为4294967295
	printf("%d,%u\n", x,x);


	unsigned int y = -1;
	unsigned int z = 4294967295;
	/*赋值号的本质就是二进制的拷贝 -1的补码是
	1111 1111 1111 1111 1111 1111 1111 1111
	%u是无符号的,所以就是32位1转为十进制即可*/
	printf("%d,%u\n",y,y);
	/*4294967295的原码是
	1111 1111 1111 1111 1111 1111 1111 1111
	%u是无符号的,所以就是32位1转为十进制即可*/
	printf("%d,%u",z,z);

	getchar();
}


输出:

14fd90
-1,4294967295
-1,4294967295
-1,4294967295

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页

打赏

进击的小猿

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值