学习笔记---位运算

本文介绍了位运算,包括左移、右移、取反、与、或、异或运算符的规则和示例。通过代码解析展示了这些运算在实际中的应用,如变量的快速翻倍、除法操作以及实现跑马灯效果。

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

位运算


位运算符
优先级运算符功能结合方式
2~按位取反由左向右
5<<   >>左移   右移由左向右
8&按位与由左向右
9^按位异或由左向右
10|按位或由左向右


左移、右移运算符:


运算规则:将变量的二进制数整体左移/右移一位。


代码示例:

#include <stdio.h>
#include <stdlib.h>
/*这个程序用来测试左移运算符*/
int main()
{
    unsigned short int n=3;
    int i;
    for(i=0;i<10;i++)
    {
        printf("%d\n",n);
        n<<=1;//作用相当于n=n<<1;
    }

    return 0;
}
结果:


解析:

1.如上代码所示,左移带来的是变量n的翻倍。这个特性使得左移、右移运算符常用于变量的*2/2的操作

2.对于以上n,其值在内存中的二进制表示如图所示:


将其进行一次左移。则其值在内存中的二进制表示如图所示:


可以看到,该二进制数整体左移了一位。将其换算成十进制数,正好是6

以上即是左移运算的原理,而右移运算同理。

3.>>后面的数组代表移动的位数。比如n>>2代表n右移两位,得到的效果就n=n/2/2.


取反、与、或、异或运算符:


取反运算规则:将变量的二进制数进行反转0变为11变为0

与运算规则:将进行运算的两变量的二进制数进行逐位比较,进行逻辑中的与运算,只是将1作为真,将0作为假。

或运算规则:和以上与运算相似,只是进行逻辑中的或运算。

异或运算规则:和以上的运算相似,只是判断改为判断各位的数字是否相同,如果相同,则结果中该位为假0否则为真1


代码示例:

#include <stdio.h>
#include <stdlib.h>
/*这个程序用来测试按位与、或、异或三种运算符*/
int main()
{
    unsigned short m=0x3A,n=0x02f,t;
    t=~m;
    printf("%x\n",t);
    t=m&n;
    printf("%x\n",t);
    t=m|n;
    printf("%x\n",t);
    t=m^n;
    printf("%x\n",t);
    return 0;
}
结果:


解析:

1.对于以上代码中的m,在内存中的二进制表示如下:


m按位取反之后,在内存中的二进制表示如下:


mn按位与的过程,在内存中的二进制表示如下:


mn按位或的过程,在内存中的二进制表示如下:


mn按位异或的过程,在内存中的二进制表示如下:



以下为利用位运算实现的跑马灯小程序:


代码示例:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
/*这个程序用于实现跑马灯效果*/


void show(int m);
int main()
{
    unsigned int x=0x1,y=0x10;
    while(1)
    {
        show(x);
        x=(x<<2)|(x>>(30));
        show(y);
        y=(y<<2)|(y>>(30));
        Sleep(50);
        system("cls");
    }


    return 0;
}
void show(int m)
{
    int i;
    for(i=0;i<32;i++)
    {
        if(m%2==0)
            printf("○");
        else
            printf("●");
        m/=2;
    }
    printf("\n");
}
结果:


解析:使用位运算改变变量的二进制表示中1的位置,再根据01的位置输出,实现该程序。




### yt-dlp-webui 安装、配置与使用教程 #### 1. 关于 yt-dlp-webui yt-dlp-webui 是一个基于 Web 的用户界面工具,用于简化 yt-dlp 的操作过程。它允许用户通过浏览器访问管理视频下载任务,而无需直接在命令行中运行复杂指令[^2]。 --- #### 2. 安装 yt-dlp-webui ##### (a) 环境准备 - **操作系统支持**: Windows, macOS 或 Linux。 - **依赖项**: - Python(建议版本 >= 3.8) - yt-dlp 工具本身已集成至项目中,因此无需单独安装。 ##### (b) 获取源码 可以通过以下方式获取项目的最新代码: ```bash git clone https://gitcode.com/gh_mirrors/yt/yt-dlp-web-ui.git cd yt-dlp-web-ui ``` 如果未安装 `git`,也可以手动从项目页面下载 ZIP 文件并解压。 ##### (c) 运行服务 进入项目目录后,启动内置的服务: ```bash python app.py ``` 默认情况下,Web UI 将监听本地地址 `http://localhost:5000`。打开浏览器访问该地址即可看到图形化界面。 --- #### 3. 配置 yt-dlp-webui ##### (a) 自定义端口 如果需要更改默认端口号(如避免冲突),可以在启动脚本中修改参数: ```bash python app.py --port=8080 ``` ##### (b) 设置工作目录 为了方便管理存储下载的文件,推荐设置独立的工作目录。编辑 `config.json` 文件中的 `output_dir` 参数来指定目标路径: ```json { "output_dir": "/path/to/output" } ``` 注意:Windows 用户应确保路径为全英文字符以防止潜在编码问题[^3]。 --- #### 4. 使用 yt-dlp-webui 下载视频 ##### (a) 输入链接 登录到 Web UI 后,在首页输入要下载的目标 URL 并点击提交按钮。 ##### (b) 选择格式 系统会自动解析可用的媒体格式列表供用户挑选。例如 MP4、MKV 等多种分辨率选项均可在此阶段选定。 ##### (c) 开始下载 确认无误后触发下载流程。进度条会在界面上实时更新直到完成为止。 对于高级需求者来说还可以附加额外参数比如仅提取音频或者限定质量范围等等[^4]。 --- ### 示例代码片段 以下是调用 yt-dlp API 的简单例子展示如何程序化处理多媒体资源: ```python import subprocess def download_video(url, output_path): command = [ 'yt-dlp', '-o', f'{output_path}/%(title)s.%(ext)s', url ] result = subprocess.run(command, capture_output=True, text=True) if result.returncode != 0: raise Exception(f"Download failed: {result.stderr}") return result.stdout.strip() video_url = "https://example.com/video.mp4" save_to_folder = "./downloads" try: message = download_video(video_url, save_to_folder) print(message) except Exception as e: print(e) ``` 此段落描述了利用子进程模块执行外部命令从而实现自动化批量抓取功能的方法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值