C中无符号数与有符号数的运算

在C语言中,无符号数和有符号数是不同的数据类型,它们在内存中以不同的方式表示和处理。

对于有符号数,例如signed char、signed int、signed long等,使用最高位来表示正负号,剩余位表示数值。

例如,对于一个8位的有符号整数,范围通常是-128到127。

而对于无符号数,例如unsigned char、unsigned int、unsigned long等,所有的位都用于表示数值,没有正负号的区分。

例如,对于一个8位的无符号整数,范围是0到255。

当有符号数和无符号数进行混合运算时,C语言会将有符号数自动转换为无符号数进行计算。

这种隐式类型转换可能会导致一些意想不到的结果,因此在使用时需要格外小心。

例如,考虑下面这个例子:

cpp 复制代码
#include<stdio.h>

int main(){

    unsigned int a = 10;

    int b = -20;

    int c = a + b;



if (a+b > 0) {

// if (c > 0) {

    printf("%d\n",c);

    printf("%llu\n",b);

    printf("a + b is positive.\n");

} else {

    printf("%d\n",c);

    printf("%llu\n",b);

    printf("a + b is negative.\n");

}

    return 0;

}

在这个例子中,由于b是一个有符号数,它会在与无符号数a进行计算时被隐式转换为无符号数。

因此,-20会被当作一个非常大的正整数,计算结果可能不是我们期望的。

为了避免出现意外的结果,我们应该在混合运算之前进行显式的类型转换,或者确保有符号数和无符号数之间的操作是安全和正确的

相关推荐
shirsl1 分钟前
算法 Day 5 树 / 二叉树 + DFS
数据结构·python·算法
木子算法33 分钟前
非凸、离散、还耦合:论文里的求解方法是一条四步流水线
人工智能·算法·目标跟踪
虚无的纽扣36 分钟前
【力扣刷题】第二天:无重复字符的最长字串、移动零问题
算法·leetcode·排序算法
多弗朗皮卡丘38 分钟前
数据结构9:排序算法
c语言·数据结构·排序算法
张祥6422889041 小时前
牛顿迭代法求解开普勒方程:从RTKLIB源码到数值分析
人工智能·算法·机器学习
Niuguangshuo1 小时前
论文解读:Deep Speech 2,工业级英中端到端 ASR 系统报告
算法·音视频·语音识别
nvvas1 小时前
Java 入门(四):数组——数据的集合管理
java·开发语言
钓鱼的肝1 小时前
csp-j-s总结(2)
c++·经验分享·笔记·算法·青少年编程
奇妙之二进制1 小时前
机器人导航路径规划算法入门(6)Dijkstra(迪杰斯特拉)算法深入解析
算法·导航
Niuguangshuo2 小时前
论文解读:Qwen2-Audio,阿里的通用音频语言模型
算法·音视频·语音识别