当前位置: 首页 > news >正文

C 语言基础:操作符、进制与数据表示通俗讲解

C 语言基础:操作符、进制与数据表示通俗讲解

  • C 语言基础:操作符、进制与数据表示通俗讲解
    • 操作符详解:从基础到实用
      • 位操作符:二进制层面的魔法
      • 赋值操作符的进阶用法
      • 三元运算符的巧妙应用
    • 进制转换:程序员的"语言切换"
      • 多进制输出技巧
      • 十六进制的实用价值
    • 原码、反码、补码:计算机的"负数思维"
      • 为什么需要补码?
      • 补码计算实例
      • 位操作与补码的配合


C 语言基础:操作符、进制与数据表示通俗讲解

操作符详解:从基础到实用

位操作符:二进制层面的魔法

位操作符是直接对数字二进制位进行操作的工具,在底层编程中非常实用:

  • 按位与(&):两个位都为1时结果为1,可用于"清零"特定位。
int a = 0b1010; // 10
int b = 0b1100; // 12
printf("%d", a & b); // 输出8(0b1000,保留共同为1的位)
  • 按位或(|):至少一个位为1时结果为1,可用于"设置"特定位。
printf("%d", a | b); // 输出14(0b1110,合并所有1的位)
  • 按位异或(^):位不同时结果为1,可用于"翻转"特定位。
printf("%d", a ^ b); // 输出6(0b0110,不同的位保留1)
  • 左移(<<)右移(>>):将二进制位整体移动,相当于快速乘除2的幂。
printf("%d", 8 << 1); // 16(左移1位=×2)
printf("%d", 16 >> 2); // 4(右移2位=÷4)

赋值操作符的进阶用法

除了基本的=,复合赋值操作符能让代码更简洁:

int x = 10;x += 5;  // 等价于 x = x + 5 → x=15
x *= 3;  // 等价于 x = x * 3 → x=45
x &= 0b111; // 等价于 x = x & 0b111 → 保留低3位

三元运算符的巧妙应用

条件操作符?:可以简化简单的if-else判断:

int score = 75;// 格式:条件 ? 满足时的值 : 不满足时的值
char* result = (score >= 60) ? "及格" : "不及格";printf("%s", result); // 输出"及格"

进制转换:程序员的"语言切换"

多进制输出技巧

在printf中用特定格式符可直接输出不同进制:

int num = 255;printf("十进制:%d\n", num);   // 255
printf("八进制:%o\n", num);   // 377(前缀0可省略)
printf("十六进制:%x\n", num); // ff(小写)
printf("十六进制:%X\n", num); // FF(大写)

十六进制的实用价值

十六进制因与二进制转换方便(1位16进制=4位二进制),常用于表示内存地址或颜色值:

int color = 0xFF0088; // 红色(FF)、绿色(00)、蓝色(88)的混合色

原码、反码、补码:计算机的"负数思维"

为什么需要补码?

  • 原码:直接表示正负,但计算时会出现0-0两种表示
  • 反码:解决了部分问题,但仍有正负零问题
  • 补码:彻底解决正负零问题,且能让加减法用同一套电路实现

补码计算实例

以8位整数为例,计算3 + (-2)

  1. 3的补码:00000011
  2. -2的补码:11111110(原码10000010→反码11111101→加1得补码)
  3. 相加结果:00000011 + 11111110 = 100000001
  4. 去掉最高位溢出,得00000001(即1),计算正确!

位操作与补码的配合

利用补码特性可以简化操作,比如取相反数:

int a = 5;int b = ~a + 1; // 等价于 -a(补码的取反加1就是相反数)
printf("%d", b); // 输出-5

通过这些基础概念的理解,能帮你更深入掌握C语言的底层逻辑,为后续学习指针、内存操作打下基础。

意气风发,漫卷疏狂
学习是成长的阶梯,每一次的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中
如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
logo 我是意疏 下次见!

http://www.dtcms.com/a/271961.html

相关文章:

  • AI【应用 03】Windows环境部署 TTS CosyVoice2.0 详细流程记录(Matcha-TTS、spk2info.pt等文件分享)
  • Qt中处理多个同类型对象共享槽函数应用
  • git多分支管理
  • 缺陷的生命周期(Bug Life Cycle)是什么?
  • Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
  • WWDC 25 风云再起:SwiftUI 7 Charts 心法从 2D 到 3D 的华丽蜕变
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(四十二) -> 动态修改编译配置
  • 全面解析 wxPython:构建原生桌面应用的 Python GUI 框架
  • 【计算机基础理论知识】C++篇(二)
  • [python] 数据拷贝浪费内存,原地修改暗藏风险:如何平衡内存使用效率与数据完整性?
  • 【SpringBoot实战系列】SpringBoot3.X 整合 MinIO 存储原生方案
  • C++类对象多态底层原理及扩展问题
  • Python-GEE遥感云大数据分析与可视化(如何建立基于云计算的森林监测预警系统)
  • Yolov模型参数对比
  • Docker的/var/lib/docker/目录占用100%的处理方法
  • 变压器初级(原边)和次级(副边)的感应电动势、电压方向如何标注?
  • 安卓应用启动崩溃的问题排查记录
  • 《Effective Python》第十三章 测试与调试——使用 Mock 测试具有复杂依赖的代码
  • 【笔记分享】集合的基数、群、环、域
  • Python毕业设计232—基于python+Django+vue的图书管理系统(源代码+数据库)
  • EXCEL_单元格中图片调整代码留存
  • 什么是Kibana
  • 【C++】第十四节—模版进阶(非类型模版参数+模板的特化+模版分离编译+模版总结)
  • 保姆级搭建harbor私有仓库与docker-ce教程与使用教程
  • 机器学习基础:从理论到实践的完整指南
  • 解锁医疗新视界:医患共决策时间轴AI可视化工具
  • Linux面试问题-软件测试
  • Web前端:table标签的用法与属性
  • 酒店IPTV系统:重塑数字化时代的宾客体验生态
  • 图计算怎么用?从数据到关系的魔力