C语言格式符%d与%D的区别
来源:互联网 发布:sql server2000下载 编辑:程序博客网 时间:2024/06/05 21:05
在读此文之前,请先阅读《有符号整数与无符号整数》:
http://blog.csdn.net/haishu_zheng/article/details/73104930
一、原码、反码、补码
数在计算机里是以二进制来表示的。数分为有符号数和无符号数。对于有符号数来说,最高位用来表示符号,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 <stdio.h>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;}
运行结果:
- C语言格式符%d与%D的区别
- scanf("%d%d",&x,&y);与scanf("%d,%d",&x,&y);的区别 c语言输入注意
- c语言,%d %.2d %2d %02d的区别
- c语言,%d %.2d %2d %02d的区别
- C语言中%d %.2d %2d %02d的区别
- C语言中%d %.2d %2d %02d的区别
- D:/与D:\的区别
- C语言中的输出%d和%lf格式的数据
- c 语言中 %d,%lu等区别
- C语言实现printf的基本格式输出%d,%c,%p,%s
- 关于C语言的printf("%d,%d,%d,%d\n",a,++a,a--,a--);
- C和python中%d %.2d %2d %02d的区别
- 关于printf("%d",A)与printf("%02d",A) 类型的printf的格式修饰符
- c语言格式输出剖析——用%d输出float类型数据与int类型%f格式输出
- 对于C语言的输出格式("/n%2d,%2.1f,%2.11f)是什么意思
- [C语言] 对于scanf()函数使用%d格式说明符无法读取字符的个人理解
- c语言函数--D
- \D 和[^\d.]的区别
- pyhotn3入门基础-8切片
- MongoDB Dao层复杂查询、更新方法实现
- 16.java语言基础-获取数组最大和最小元素
- shiro注解权限控制-5个权限注解
- eclipse远程debug
- C语言格式符%d与%D的区别
- 使用spring boot admin监控spring cloud应用程序
- 材料科学+网卡=下一代网卡
- 19.java语言基础-元素出现索引(线性搜索)
- [leetcode]142. Linked List Cycle II
- 女程序员开发之路
- ArcEngine开发中StartEditing和StartEditOperation的区别(对于数据安全很重要!!)
- Swift循环遍历集合方法总结
- 23种设计模式之中介者模式