C-操作符详解

本文详细介绍了二进制、八进制和十六进制之间的转换方法,以及整数的原码、反码和补码表示,涵盖了移位操作、位操作符、结构体的使用和C语言操作符的优先级与结合性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.进制转换

1.1 10进制转2进制

方法:短除法

1.2 2进制转换8进制

8进制的数字每⼀位是0~7的,0~7的数字,各⾃写成2进制,最多有3个2进制位就⾜够了,⽐如7的⼆进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算⼀个8进制位,剩余不够3个2进制位的直接换算。
如:2进制的01101011,换成8进制:01530开头的数字,会被当做8进制。
我有一个问题:怎么区别 0111是8进制还是2进制?
1.3 2进制转换16进制
2进制转化16进制和2进制转换8进制十分相似,
16进制的数字每⼀位是0~9,a ~f 的,0~9,a ~f的数字,各⾃写成2进制,最多有4个2进制位就⾜够了,
⽐如 f 的⼆进制是1111,所以在2进制转16进制数的时候,从2进制序列中右边低位开始向左每4个2进
制位会换算⼀个16进制位,剩余不够4个⼆进制位的直接换算。
如:2进制的01101011,换成16进制:0x6b,16进制表⽰的时候前面加0x
2 原码,反码,补码
整数 的2进制表⽰⽅法有三种,即原码、反码和补码
有符号整数的三种表⽰⽅法均有符号位数值位两部分,2进制序列中,最⾼位的1位是被当做符号
位,剩余的都是数值位。
符号位都是⽤0表⽰“正”,⽤1表⽰“负”。
正整数的原、反、补码都相同。
负整数的三种表⽰⽅法各不相同。
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
反码得到原码也是可以使⽤:取反,+1的操作
对于整形来说:数据存放中其实存放的是补码。
//操作符详解
#include<stdio.h>

int main()
{
	int num1 = 10;
	//10存放在整型变量num1中,占4个字节==32个bit位
	//0000 0000 0000 0000 0000 0000 0000 1010 -原码
	//0000 0000 0000 0000 0000 0000 0000 1010 -反码
	//0000 0000 0000 0000 0000 0000 0000 1010  -补码

	//正数的原码,反码,补码都一样
	int num2 = -10;
	//-10存放在整型变量num2中,占4个字节==32个bit位
	//1000 0000 0000 0000 0000 0000 0000 1010 -原码
	//1111 1111 1111 1111 1111 1111 1111 0101 -反码
	//1111 1111 1111 1111 1111 1111 1111 0110 -补码

	//负数的原码,反码,补码要经过计算
	return 0;
}

为什么计算机中存补码呢?

在计算机系统中,数值⼀律⽤补码来表⽰和存储。原因在于,使⽤补码,可以将符号位和数值域统⼀ 处理;同时,加法和减法也可以统⼀处理(CPU只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值