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

C语言 int uint16_t 踩坑记录

使用 uint16_t 存储 int的负数,有可能读出来是65535 ?

是的,如果你尝试使用 uint16_t 类型来存储一个负数 int 值,你可能会得到 65535。这是因为 uint16_t 是一个无符号的16位整数类型,它的取值范围是从 0 到 65535(即 0 到 2^16 - 1)。当将一个负数强制转换为 uint16_t 时,实际上会发生一种称为“类型提升”的过程,这个过程会将负数的二进制表示转换为一个无符号整数。
这里有一个例子来说明这个过程:

#include <stdio.h>
#include <stdint.h>
int main() {int value = -1; // 假设我们有一个负数uint16_t unsigned_value = (uint16_t)value; // 将其强制转换为uint16_tprintf("The unsigned value is: %u\n", unsigned_value); // 输出会是 65535return 0;
}

在二进制中,int 类型的 -1 通常表示为所有位都是1(假设使用的是补码表示法,这是现代计算机系统中表示负数的常用方法)。例如,对于一个16位的 int-1 的二进制表示是:

11111111 11111111

当这个值被强制转换为 uint16_t 时,相同的位模式被解释为一个无符号整数,其值就是 65535:

00000000 00000001 11111111 11111111 (32位二进制表示)11111111 11111111 (取低16位)

因此,将 -1 强制转换为 uint16_t 会导致结果为 65535。同样的情况会发生在任何负数上,因为它们的二进制表示在转换成无符号整数时会被解释为比 uint16_t 类型最大值还要大的正数。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • docker拉取redis5.0.5并建立redis集群
  • 13款常用AI编程工具
  • Opencv中的直方图(5)计算EMD距离的函数EMD()的使用
  • 数学建模常用工具总结
  • FPGA搭建XDMA中断模式的PCIE通信架构,简单读写测试,提供7套工程源码和技术支持
  • 【sensor】激光雷达的分类和优缺点(六)
  • Linux下基于TCP协议的简易服务器实现(C语言)
  • dubbo 服务消费原理分析之应用级服务发现
  • UI(五)常用布局总结
  • RDP最小化之后仍然保持UI渲染的方法
  • php 实现推荐算法
  • 建模导论的最后一个视频笔记
  • 内存序学习笔记(一)——表达式求值顺序
  • 深入提示工程:解锁ChatGPT的无限潜能,掌握AI时代的智能对话技巧
  • iOS——线程安全、线程同步与线程通信
  • @jsonView过滤属性
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Computed property XXX was assigned to but it has no setter
  • Date型的使用
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES学习笔记(12)--Symbol
  • flask接收请求并推入栈
  • Java的Interrupt与线程中断
  • Js基础——数据类型之Null和Undefined
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • node入门
  • select2 取值 遍历 设置默认值
  • Travix是如何部署应用程序到Kubernetes上的
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 基于遗传算法的优化问题求解
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 我建了一个叫Hello World的项目
  • 译米田引理
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • mysql面试题分组并合并列
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (k8s)Kubernetes本地存储接入
  • (搬运以学习)flask 上下文的实现
  • (补)B+树一些思想
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (七)Java对象在Hibernate持久化层的状态
  • (实测可用)(3)Git的使用——RT Thread Stdio添加的软件包,github与gitee冲突造成无法上传文件到gitee
  • (文章复现)基于主从博弈的售电商多元零售套餐设计与多级市场购电策略
  • (学习总结16)C++模版2
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .net 中viewstate的原理和使用
  • .Net(C#)常用转换byte转uint32、byte转float等
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例