C语言按位取反【~】详解,含原码反码补码的0基础讲解【原码反码补码严格意义上来说属于计算机组成原理的范畴,不过这也是学好编程初级阶段的必修课】

目录

概述【适合0基础看的简要描述】:

上述加粗下划线的内容提取版:

从上述概述中提取的核心知识点,需背诵:

整数【包含整数,负整数和0】的原码反码补码相互转换的过程图示:

过程详细刨析:

运行结果展示:


概述【适合0基础看的简要描述】:

整型的表示方法:原码,反码,补码

正整数的符号位为0,负整数的符号位为1

正整数的原码=反码=补码;

负整数的原码先写出来,符号位不变,其他位按位取反就可以得到反码,反码+1即可得到补码。
++进行运算或者赋值时,输入的都是十进制数,转换成二进制即为该数的原码,再转换成补码就可以进行赋值或运算了,赋值或运算结束后,将补码转换成原码,最后将补码转换成十进制就是最终的结果了。++

上述加粗下划线的内容提取版:

十进制 -> 二进制源码 -> 二进制补码 -> 按位取反 -> 二进制原码 -> 十进制


从上述概述中提取的核心知识点,需背诵:

按位取反 :对一个数的二进制补码进行取反。(0转1,1转0)。

原码:在数值前面增加一位符号位,0表示正数,1表示负数。

反码:正数的反码与原码相同;负数的反码对其原码逐位取反(符号位除外)。

补码:正数的补码与其原码相同;负数的补码是在其反码的末位+1。


整数【包含整数,负整数和0】的原码反码补码相互转换的过程图示:


过程详细刨析:

cpp 复制代码
//按位取反【~】【cout函数默认整型是int,(由于int整型是占4个字节的,相当于32个bit位(不算符号位),所以二进制一共有32位数值位+最左边的一位符号位【符号位若为0代表数的十进制是个非负数,符号位若为1代表数的十进制是个正数】)】
#include<iostream>
using namespace std;
int main() {
	cout << (~0) << endl;
	//0存储在内存中:
	// 0b 0 00000000 00000000 00000000 00000000  【0的原码=反码=补码】【从左往右数第一位是符号位】
	// 0b 0 00000000 00000000 00000000 00000000    【0的补码】
	// ~0【0按位取反的过程:】 
	// 0b 1 11111111 11111111 11111111 11111111  0的补码按位取反后的结果【从左往右数第一位是符号位,进行按位取反时,符号位也要取反】
	// 0b 1 11111111 11111111 11111111 11111110  补码-1=反码
	// 0b 1 00000000 00000000 00000000 00000001  反码取反=原码
	// 所以0的按位取反结果是-1
	
	//求一个数的相反数【(按位取反x)+1=(-x)】
	int a = 16;
	cout << (~a) + 1 << endl;
	// ~16【按位取反16的过程:(简略写:省略了一部分数值位,详细的看上面0的按位取反)】
	// 0b 0 10000  16的原码=反码=补码
	// 0b 1 01111  16的补码按位取反=~16的补码
	// 0b 1 01110  ~16的反码
	// 0b 1 10001  ~16的原码
	// ~16=-17
	// (~16+1)=-16
	return 0;
}

运行结果展示:

相关推荐
知识分享小能手10 分钟前
概理论与数理统计学习教程,从入门到精通,在数理统计中应用R软件(22)
开发语言·学习·r语言
乐观勇敢坚强的老彭15 分钟前
C++信奥GESP四级的常见题型和解题模板速查表
开发语言·c++
denggun1234521 分钟前
信号量(DispatchSemaphore vs AsyncSemaphore)、swift协作式线程池 and python信号量
开发语言·python·swift
lisw0524 分钟前
计算与科学哲学(Philosophy of Computing and Science)
java·开发语言·人工智能
深念Y1 小时前
为什么选 Go:直观、可维护、AI 友好
linux·开发语言·人工智能·golang·agent·harness
Billy121381 小时前
Day25-编译期计算与 constexpr if:跨越编译与运行的边界
开发语言·c++进阶学习
小小龙学IT2 小时前
第七节 C++ 与 QML 交互
开发语言·qt
老当益壮梁奶奶2 小时前
Linux 软件编程学习笔记(六):线程编程入门与实践
linux·c语言·c++·笔记·学习
晓晓_za8986682 小时前
Geo 优化源码二次开发:自定义地域规则改造实操文档
java·开发语言·搜索引擎·ci/cd·矩阵
ShineWinsu3 小时前
对于TRAE中配置Qt的解析
开发语言·c++·ide·vscode·qt·ai·trae