c语言编程中%d怎么运用的,C语言格式符%d与%D的区别

在读此文之前,请先阅读《有符号整数与无符号整数》:

一、原码、反码、补码

数在计算机里是以二进制来表示的。数分为有符号数和无符号数。对于有符号数来说,最高位用来表示符号,1为负,0为正。

原码:一个数本身的二进制形式。

例(1):00000001表示1

例(2):10000001表示-1

反码:正数的反码是它本身,负数的反码是原码的最高位(符号位)不变,其他位取反。

例(3):00000001的反码是00000001

例(4):10000001的反码是11111110

补码:计算机中存储的就是数的补码形式。正数的补码和它的原码、反码相同;负数的补码是反码加1。

例(5):00000001的补码是00000001

例(6):10000001的补码是11111111

原码与补码的转化规律:

(1)正数

补码=原码=反码

(2)负数

补码=原码取反+1

原码=(补码-1)取反

二、C语言中%d与%D的区别

C语言中,%d是有符号的整型格式符,%D是Mac系统下的无符号整型格式符,相当于Windows系统下的%u。Windows下没有%D格式符。

例(1):-3

-3的二进制原码是10000000,00000000,00000000,00000011,

它在计算机中的储存形式(补码)为11111111,11111111,11111111,11111101

对应的无符号数为1 * 2^31 + 1 * 2^30 + …… + 1 * 2^2 + 1 * 2^1 + 0 * 2^0 = 4294967293

例(2):-27

-27的二进制原码是10000000,00000000,00000000,00011011,

它在计算机中的储存形式(补码)为11111111,11111111,11111111,11100101

对应的无符号数为1 * 2^31 + 1 * 2^30 + …… + 1 * 2^5 + 0 * 2^4 + 0 * 2^3 + 1 * 2^2 + 0 * 2^1 + 1 * 2^0 = 4294967267

例(3):-243

-243的二进制原码是10000000,00000000,00000000,11110011,

它在计算机中的储存形式(补码)为11111111,11111111,11111111,00001101

对应的无符号数为1 * 2^31 + 1 * 2^30 + …… + 0 * 2^7 + 0 * 2^6 + 0 * 2^5 + 0 * 2^4 + 1 * 2^3 + 1 * 2^2 + 0 * 2^1+ 1 * 2^0 = 4294967053

三、编程验证

现在,编写C程序来对上面三个例子的计算结果进行验证。由于本人是在Windows下编写的程序,所以程序里用%u而不是%D。

代码:

#include

int main(int argc, const char * argv[])

{

int a,b,c;

a = -3;

b = -27;

c = -243;

printf("有符号a=%d\t无符号a=%u\n", a, a);

printf("有符号b=%d\t无符号b=%u\n", b, b);

printf("有符号c=%d\t无符号c=%u\n", c, c);

return 0;

}

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值