【Day 10】C 语言的位元运算子

今天,我们来学位元运算子以及赋值运算子吧!

位元运算子

位元运算子作用於位元,并逐位执行。"&"、"|"、"^"真值表如下:

A B A&B A\|B A^B
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0

简单介绍一"&"、"|"、"^"这三个运算子:

  • &": 一定要都是 1,输出才为 1。(似数位逻辑里的 and 闸)
  • |": 任一为 1,输出就为 1。(似数位逻辑里的 or 闸)
  • ^": 相同为 1,不同为 0。(似数位逻辑里的 xor 闸)

再举个例子:
如果今天有个变数 A=60,变数 B=13,以二进位表示:A= 00111100  B= 00001101
接下来我们做位元运算:

  1. A&B= 00001100,等於 12
  2. A|B= 00111101,等於 61
  3. A^B= 00110001,等於 49

C 所支援的位元运算还加上"~"、"<<"、">>"

  • ~" : 取反运算子,(~ A) 会得到 61,即 11000011,一个有符号二进位补数形式。
  • <<" : 二进位左移运算子,将一个数的各二进位全部左移若干位(左边的二进位丢弃,右边补 0) ex. A<<2,会等於 240,因为本来 A= 00111100,往左移位一次等於 01111000,再移一次等於 11110000,就会等於 240。
  • >>" : 二进制右移运算子。将一个数的各二进位全部右移若干位,正数左补 0,负数左补 1,右边丢弃。ex. A>>2,会等於 15,因为本来 A= 00111100,往右移一位会等於 00011110 再往右移一位会等於 00001111,就会等於 15。

以上参考
ITREAD01 - 位运算子

上面举例的,写成程序会长这样:

#include<stdio.h>
int main(){
	int A = 60, B = 13 ;
	printf("A&B=%d\n", A&B); 
	printf("A|B=%d\n", A|B); 
	printf("A^B=%d\n", A^B);
	printf("~A=%d\n", ~A);  
	printf("A<<2=%d\n", A<<2);
	printf("A>>2=%d", A>>2);
	return 0; 
}

这是输出结果:

会发现,程序输出结果与刚刚举例推算出的结果是一样的~

明天,来介绍运算子部分的最後一个小单元 : 赋值运算子!!


<<:  Day 20 资料宝石:RDS 架构解析

>>:  [面试][前端]请说明你现在专案用到的前端框架

完全理解React的completeWork以及错误边界

点击进入React源码调试仓库。 概述 每个fiber节点在更新时都会经历两个阶段:beginWor...

Day23 Let's ODOO: Currency

当我们使用销售或是产品的模组,我们有时候会针对各种货币来做销售单,但这样会造成统计问题,所以Odoo...

EP 30 - 套件发布以及范例网站部署

Youtube 频道:https://www.youtube.com/c/kaochenlong ...

30天打造品牌特色电商网站 Day.4 网站设计及Figma介绍

开始打程序前,网页设计是不可或缺的环节! 网站介面设计,称为UIUX设计 UI指使用者介面(User...

DAY4.看了两个YT的影片

今天到嘉义开店 从高雄坐火车到嘉义 在坐火车的一个小时 把外国教python flask的影片看完 ...