计算机中的位运算(C语言举列)

chenweimin 2月前 ⋅ 501 阅读
#if 1

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

int main(int argc, char* argv[]) {

	/*
	* 学习位运算的前提知识
	位运算:  1.在计算机中一个字节(byte) 代表八个位(bit)  一个位只能表示0或者1   00000000 第一个位代表符号位 0代表正数 1代表负数
	         2.计算机如何代表真(true)假(false)   在计算机中0代表假(false) 非0则真(true)
			 3.计算机 原码 =最高位(符号位) +低位
			 4.计算机 反码 正数反码和原码一样  负数除了最高位符号位不变 其余位取反
			 5.计算机 补码 正数和原码一样   负数在反码基础上加一
			 6.计算机存储数据都是通过补码的方式进行存储的

	*/


	// ~ 非 用我们通常好理解点的就是取反 真则变为假 假则变为真
#if  0
	char a = 2; // 0000 0010 
	char b = ~a; // 1111 1101  但是计算机在存储时都是存的补码 1111 1101 是原码 ->反码 1000 0010 ->补码为 1000 0011 结果就为-3
	printf("%d\n", b);
#endif 



	// & 与 意思就是并且 比如说年龄大于18并且身高大于175 这个时候两个条件都必须满足
	//0&0 也就是 假&假 ->假 0&1 假&真 ->还是假 1&1 真&真 ->真 所以得出结论就是 &全真则为真 否则为假
#if  0
	char a = 2; //0000 0010   
	char b = 1; //0000 0001
	char c = a & b; //0000 0000 ->正数的反码还是自己 ->正数的补码还是自己  a&b =0
	printf("%d\n", c);
#endif 

	// | 或 意思就是或者 比如说年龄大于18或者身高大于175 这个时候只要其中一个条件满足就为真 如果都不满足则为假
	//0|0 也就是 假|假 ->假 0|1 假|真 ->真  1|0 真|假 ->真 1|1 真|真 ->真 所以得出的结论就是 只要一个位真则为真 全部为假则为假
#if  0
	char a = 2; //0000 0010   
	char b = 1; //0000 0001
	char c = a | b; //0000 0011 ->正数的反码还是自己 ->正数的补码还是自己  a|b =3
	printf("%d\n", c);
#endif 
	// ^ 异或 个人理解就是找两个数的不同结果 如果两个数都为1 或者都为0 则为 0


#if  1
	char a = 2; //0000 0010   
	char b = 2; //0000 0010
	char c = a ^ b; //0000 0000 ->正数的反码还是自己 ->正数的补码还是自己  a^b =0
	printf("%d\n", c);
#endif 
	return EXIT_SUCCESS;
}

#endif

全部评论: 0

    我有话说: