首页 > 其他分享 >C语言获取X的第Y位的二进制值,或者设置值

C语言获取X的第Y位的二进制值,或者设置值

时间:2023-02-15 03:55:05浏览次数:33  
标签:左数 右移 二进制 C语言 获取 按位 从右往 操作

如:

#define GetBit(x,y) ((x) >> (y)&1)	//获取将x的第y位(0或1)
#define SetBit(x,y) x|=(1<<y) 		//将X的第Y位置1
#define ClrBit(x,y) x&=~(1<<y) 		//将X的第Y位清0

设置值解释(ChatGPT):

这段代码是对变量 x 进行右移 y 位操作,然后将结果和 1 进行按位与操作。它的含义是获取 x 的二进制表示中,从右往左数第 y 位的值,结果为 0 或 1。具体地,右移操作将 x 的二进制表示向右移动 y 位,将最右边的 y 位丢弃,然后将剩余的高位补 0。按位与操作将这个结果与二进制表示为 1 的数(只有最低位为 1,其他位都是 0)进行按位与操作,这样可以保留结果的最低位,其它位都被清零。这样得到的结果就是 x 的二进制表示中,从右往左数第 y 位的值。

举例:

1:

当 x = 210(二进制为 11010010),y = 4 时,((x) >> (y)&1) 的计算过程如下:

右移操作:将 x 的二进制表示向右移动 y=4 位,得到 00001101(二进制)。
按位与操作:将 00001101 和 00000001(二进制)进行按位与操作,得到 00000001(二进制)。
因此,((x) >> (y)&1) 的结果为 1。这表示 x 的二进制表示中,从右往左数第 y=4 位的值为 1。

2:

lemon233
那么Y为5呢
当 x = 210(二进制为 11010010),y = 5 时,((x) >> (y)&1) 的计算过程如下:

右移操作:将 x 的二进制表示向右移动 y=5 位,得到 00000110(二进制)。
按位与操作:将 00000110 和 00000001(二进制)进行按位与操作,得到 00000000(二进制)。
因此,((x) >> (y)&1) 的结果为 0。这表示 x 的二进制表示中,从右往左数第 y=5 位的值为 0。

再解释:

这段代码能够得到在 x 的二进制表示中,从右往左数第 y 位的值,是因为它将 x 进行了右移 y 位操作,这相当于将 x 的二进制表示从右往左数的第 y 位移到了最低位,然后将最低位和 1 进行按位与操作,相当于只保留最低位,其它位都被清零。

因为二进制数的每一位只有 0 和 1 两个值,因此最低位的值要么为 0,要么为 1。因此,将最低位和 1 进行按位与操作后,得到的结果要么为 0,要么为 1,这就是从右往左数第 y 位的值。

标签:左数,右移,二进制,C语言,获取,按位,从右往,操作
From: https://www.cnblogs.com/Lemon-233/p/17121384.html

相关文章

  • 获取程序所在的目录
    Lazarus获取程序所在目录2023-02-15{addyourprogramhere}//必须转码,lazaur的程序是UTF8编码,windows控制台是GBK编码//不转码程序输出时会异常Writ......
  • 学习C语言第七天
    今天继续学习分支语句,主要学习是while语句和for语句#define_CRT_SECURE_NO_WARNINGS1#include<stdio.h>//intmain()//{// inti=1;// //在while循环中,break用于永......
  • 初识C语言
    下面我将对我目前总体大致的了解做一个总结,日后也会对所深入学习到的知识进行系统全面的总结,如果有错误,敬请谅解,如有可能,麻烦指出,谢谢!总述及第一个C语言程序数据类型变量、......
  • 【Python小随笔】获取N天前的所有日期
    importdatetimedefget_nday_list(n):before_n_days=[]foriinrange(1,n+1)[::-1]:before_n_days.append(str(datetime.date.today()-date......
  • 单链表:用C语言实现-单链表头文件相关定义
    一、公共头文件#ifndef__MYHEAD_H__#define__MYHEAD_H__/*******************************************************************@file:myhead.h*@brief:公......
  • .net core 使用 IOption 依赖注入获取配置值
    1appsettins配置{"Logging":{"LogLevel":{"Default":"Information","Microsoft.AspNetCore":"Warning"}},"AllowedHosts":"*",......
  • DOM 获取元素偏移量、元素尺寸以及可视窗口尺寸
    DOM获取元素偏移量、元素尺寸以及可视窗口尺寸1.获取元素对象varo_text=document.getElementById(‘id名称’);//返回:这个元素或nullvaro_text=document.getEle......
  • Vue3使用vue-router如何实现路由跳转与参数获取
    //跳转传参import{useRouter,useRoute}from'vue-router';constrouter=useRouter()constroute=useRoute()//新开页functionjump(id){consturl=router.......
  • C语言学习笔记(九):文件的操作
    C文件的知识什么是文件操作系统把各种设备都统一作为文件来处理。例如,终端键盘是输入文件,显示屏和打印机是输出文件。文件一般指存储在外部介质上数据的集合。操作系统......
  • springcloud sidecar 实现C语言调用语言模块
    以前对springcloud的印象停留在大项目功能模块的独立、负载均衡、熔断等功能。这次项目接触了另一个用法,多语言异构。以前Java调C都是用的JNA或者JNI,这次C调Java用了spring......