C语言中的移位操作

2023-05-16

 

C语言中的移位操作,内容不多。不过有些地方你不注意,就疏忽了。

 

先做两个小题先。

 

(1)unsigned char x=3;

x<<1是多少?x>>1是多少?

(2)char x=3;

x<<1是多少?x>>1是多少?

(3)char x=-3;

x<<1是多少?x>>1是多少?

 

3写成二进制数是00000011;-3写成二进制数是(补码)11111101。(负数的二进制表示是原码反码加一),正数的反码补码与原码一样

程序执行的时候,操作的是数值的编码表示,也就是数值在内存中的二进制表示。比如说,程序取-3的时候,就去取11111101。

 

(1)对无符号数3来说,x<<1往左移一位,最左边的位移掉了,最右边的移进来的位补零。变成00000110,所以结果是6;x>>1往右边移一位,由于是无符号数,所以逻辑右移,最右边一位移掉,最左边移进来的位补零,变成00000001,所以结果是1。

(2)对于有符号数3来说,x<<1往左移一位,最左边的位移掉了,最右边的移进来的位补零。变成00000110,所以结果是6;x>>1往右边移一位,由于是有符号数,可能发生逻辑右移,也可能发生算术右移,这一点,C标准并没有明确地指定是使用逻辑右移还是算术右移。但大多数的机器都使用算术右移,变成00000001,所以结果还是1。但是请注意,这只是说大多数的机器是这样的,你敢保证自己不会碰到特殊情况吗?

(3)对于有符号数-3来说,x<<1往左移一位,最左边的位移掉了,最右边的移进来的位补零。变成11111010,结果是-6。往右移一位,由于是有符号数,可能发生逻辑右移,也可能发生算术右移。大多数机器使用算术右移,变成11111110,结果是-2。

 

总结:左移时总是移位和补零。右移时无符号数是移位和补零,此时称为逻辑右移;而有符号数大多数情况下是移位和补最左边的位(也就是补最高有效位),移几位就补几位,此时称为算术右移。

 

附打印内存中字节编码的代码:

 

 


void print_char(char x)
{
  unsigned char * bp=(unsigned char *)&x;
  int size=sizeof(x);
  for(int i=0; i<size; i++)
       printf("%.2x", bp[i]);
  printf("/n");
}  

 

可以自己实践实践阿。

例:十进制数 4 进行移位操作,即1<<4 结果为 十六进制数 0000 1000

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言中的移位操作 的相关文章

随机推荐

  • 余弦衰减学习率与linear warmup结合版代码

    以下代码摘自tensorflow官方tpu仓库 span class token keyword def span span class token function cosine learning rate with linear war
  • DiffusionDet源码阅读(1)

    本文仅仅适用于已经通读过全文的小伙伴 本文代码节选自 mmdet 中的 DiffusionDet 代码 xff0c 目前该代码还处于 Development 阶段 xff0c 所以我博客里写的代码和之后的稳定版本可能稍有不同 xff0c 不
  • 分割统一框架:KNet文章

    全文谷歌翻译 43 自己理解 原地址 xff1a https arxiv org pdf 2106 14855 pdf 0 摘要 语义 实例和全景分割已经使用不同的和专门的框架来解决 xff0c 尽管它们存在潜在的联系 本文为这些本质上相似
  • python问题记录 - paramiko模块报错

    文章目录 报错关键字1 代码2 输出3 报错信息4 解决方案 报错关键字 paramikoException ignored in lt function BufferedFile del at 0x109259820 gt Attribu
  • JSP的四种范围

    JSP的四种范围 xff0c 分别为page request session application 这四者都可以用setAttribute 34 getAttribute 34 其中用page时 xff0c 为pageContext se
  • week4-C - TT 的神秘礼物

    题目 TT 是一位重度爱猫人士 xff0c 每日沉溺于 B 站上的猫咪频道 有一天 xff0c TT 的好友 ZJM 决定交给 TT 一个难题 xff0c 如果 TT 能够解决这个难题 xff0c ZJM 就会买一只可爱猫咪送给 TT 任务
  • 【linux】CentOS 7.4下使用yum安装MySQL5.7.20 最简单的

    默认配置文件路径 配置文件 xff1a etc my cnf 日志文件 xff1a var log var log mysqld log 服务启动脚本 xff1a usr lib systemd system mysqld service
  • mongodb生成自签名证书以及配置SSL以及mongo集群搭建(亲测有效)版本-5.0.6

    64 TOC mongodb生成自签名证书以及配置SSL 亲测有效 版本 5 0 6 一直以来都是向大神学习 xff0c 今天也做回大神分享 xff0c 哈哈 xff01 xff01 几个小时的努力不算白费 一 自签名证书生成 1 生成根证
  • mongodb创建用户名和密码(版本5.0.6)

    mongodb创建用户名和密码 xff08 版本5 0 6 xff09 官方文当地址 xff1a 1 mongodb 添加用户 2 mongodo将命令行参数转化为yaml参数的方法 将命令行选项转换为YAML 超级有用哦 3 mongod
  • Lua字符串切分

    lua 字符串切分示例 local requrl 61 34 10 20 144 127 8891 cas login 34 local cutstr 61 string sub requrl 2 print cutstr local cu
  • nginx lua开发配置文件详解

    加载lua文件和库文件 lua package path 34 waf nginx cnwaf lua waf nginx init lua waf nginx cnwaf plugins lua waf nginx cnwaf deps
  • win7系统安装使用高版本的nodejs-v16.19.1

    文章目录 参考 参考 win7这样操作 xff0c 可成功安装高版本node js xff01 注意 xff1a 首先安装13 14版本nodejs 删掉安装目录下的内容下载16 19 1版本的nodejs版本 xff08 下载zip的包
  • j记录一次gorm 使用协程 插入数据一直报错问题 -Duplicate entry ‘95‘ for key ‘PRIMARY‘ [14.649ms] [rows

    文章目录 问题描述问题解决 问题描述 报错代码如下 span class token keyword func span span class token function GetSystemInfoSave span span class
  • stable diffusion的使用

    文章目录 1 文生图1 1 mountains and trees and gree1 2 three dogs1 3 cats1 4 three lovely cats1 5 beautiful girl1 6 机器猫1 7 卡通图像生成
  • DIY:用开源软件搭建自己的物联网

    原文链接 xff1a DIY Open Source Software for your very own IoT 作者 xff1a Vishal Shah 翻译 xff1a 赵屹华 审校 xff1a 刘翔宇 图片来源 xff1a open
  • ubuntu开启rdp服务

    概要 ssh登录用于终端 xff0c 如果需要GUI的远程登陆ubuntu 我了解到大概3中方案 vncxrdp第三方软件 向日葵 TeamViewer之类的 因为vnc我一直配置不好 xff0c 所以试了一下xrdp xff0c 这样wi
  • csp模拟2-T1 HRZ的序列

    题目 时间限制 1s 空间限制 64MB 题目描述 相较于咕咕东 xff0c 瑞神是个起早贪黑的好孩子 xff0c 今天早上瑞神起得很早 xff0c 刷B站时看到了一个序列aaa xff0c 他对这个序列产生了浓厚的兴趣 他好奇是否存在一个
  • Ubuntu 中文件和目录的操作命令

    在 Ubuntu 中 xff0c 文件和目录的操作命令是非常重要的 这些命令帮助您在文件系统中创建 复制 移动 删除和查看文件和目录 以下是一些常用的文件和目录操作命令 xff1a cd cd 命令用于切换当前工作目录 例如 xff0c 要
  • Docker无法在WSL2的Ubuntu启动的问题

    今天在更新了WSL2上的Ubuntu22 04版本 xff0c 在安装Docker后无法启动 xff0c 查看Docker的日志显示如下的错误 INFO 2022 04 22T16 14 55 718999500 43 08 00 stop
  • C语言中的移位操作

    C语言中的移位操作 xff0c 内容不多 不过有些地方你不注意 xff0c 就疏忽了 先做两个小题先 1 unsigned char x 61 3 x lt lt 1是多少 xff1f x gt gt 1是多少 xff1f 2 char x