有符号数与无符号数

本文详细探讨了C语言中无符号与有符号整数在内存表示、类型转换及输出格式上的差异。通过示例代码展示了不同数据类型的赋值、转换及%d和%u格式符在输出时的影响,揭示了二进制补码表示法在不同上下文中的表现。理解这些概念对于C语言编程至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>

int main()
{
    unsigned char a = -1;   //a: 1111 1111 ->%d输出(32位)->无符号类型填充0 -> 0000 0000 ....1111 1111   ->255
    char b = -1;            //b: 1111 1111  ->%d输出(32位)->有符号类型填充符号位 ->1111 1111 ....1111 1111  ->%d带符号输出 ->-1
                             //b: 1111 1111  ->%u输出(32位)->有符号类型填充符号位 ->1111 1111 ....1111 1111 ->%u不带符号输出 ->4294967295 
    unsigned int c = -1;    //c: 1111 1111 1111 1111 ....(32个1)
    unsigned int d = b;     //d: b->32位寄存器(b是有符号位,高位补符号位,1111 1111 1111 ...(32个1))->d
    unsigned int e = a;     //e: e->32位寄存器(a是无符号位,高位补0,0000 0000 .... 0000 1111 1111 )->e
    printf("a = %d b = %d c = %d d = %d e = %d\n",a,b,c,d,e);
    printf("a = %u b = %u c = %u d = %u e = %u\n",a,b,c,d,e);
    return 0;
}
/*
运算结果:
a = 255 b = -1 c = -1 d = -1 e = 255
a = 255 b = 4294967295 c = 4294967295 d = 4294967295 e = 255
*/

/*输出数据常用类型汇总:
%hd、%d、%ld 以十进制、有符号的形式输出 short、int、long 类型的整数。
%hu、%u、%lu 以十进制、无符号的形式输出 short、int、long 类型的整数
%o 以八进制,无符号的形式输出int类型整数。
%x 以十六进制,无符号的形式输出整数。
%c 输出字符。
%lf 以普通方式输出double。
%e 以科学计数法输出double。
%s 输出字符串。*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值