c语言printf("%-8dn",1234);输出的是什么,【C语言篇】☞ 8. 进制、原码、反码、补码...

c语言printf("%-8dn",1234);输出的是什么,【C语言篇】☞ 8. 进制、原码、反码、补码...进制 1 基本概念进制 是一种计数的方式 数值的表示形式十进制 逢十进一 如 13 1 10 3 八进制 逢八进一 如 15 1 8 5 二进制 逢二进一 如 1101 1 2 2 2 1 2 2 0 2 1 十六进制 逢十六进一 0 9A Fd 8

进制

1. 基本概念

进制:是一种计数的方式,数值的表示形式

十进制:逢十进一        (如:13 == 1 * 10 + 3)

八进制:逢八进一        (如:15 == 1 * 8 + 5)

二进制:逢二进一        (如:1101 == 1 * 2 * 2 * 2  + 1 * 2 * 2 + 0 * 2+ 1)

十六进制:逢十六进一  (0 ~ 9  A ~  F        d  ==  13)

intnum = 12; //默认就是10进制

intnum1 = 014; //在前面加上一个0就代表八进制

printf("%dn", num1); //%d是以十进制的方式输出一个整数

printf("%on", num); //%o是以八进制的方式输出一个整数

intnum2 = 0b1100; //在数值前面加上0b或0B就代表二进制

printf("%dn", num2); //在C语言中没有提供二进制的输出格式符

intnum3 = 0x6c; //在数值前面加上0x就代表十六进制

printf("%dn", num3);

printf("%xn", num); //%x是以十六进制的方式输出一个整数

2. 常见的进制转换

10—>2:除2取余法,把10进制数除以2,然后取得余数的序列,再倒序。

方法:整数部分“除2取余法”,小数部分“乘2取整法”,高位补0,将得到的余数倒序得到的序列就是二进制的形式。

例如:将十进制(97)转换为二进制数()

e068706bca926752c04f11de9106e48a.png

2—>10:所有位的位权相加:101=1*20+0*21+1*22

2—>16:4合1法。把一个二进制数,整数部分从右向左(小数部分从左向右)4位结合成1位,不足部分补0。

f0fbda1ae2831a2054e8ca153c53fe25.png

16—>2:1拆4法,16进制的1位拆成二进制的4位。

4f6e3a0f9f7ca2e1882f949656d2e405.png

2—>8:3合1

ce252919676c0afd617f86b5f8a398ed.png

8—>2:1拆3

10—>8:除8取余

原码、反码、补码

1. 机器数和真值

在学习原码、反码和补码之前,需要先了解机器数和真值的概念

0d15ce1662fb89a954fd2f9fc394b320.png

机器数(二进制数):

一个数在计算机中的二进制表示形式,叫做这个数的机器数。(机器数对应补码形式)

机器数是带符号的,在计算机用一个数的最高位存符号位,正数为0,负数为1。

真值(二进制最高位是符号位,要与形式值区分):(真值对应原码形式)

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。

例如有符号数,其最高位1代表负,其真正数值是-3,而不是形式值131(转换成十进制等于131)

所以为了区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

例:0000 0001的真值= +000 0001 = +1;1000 0001的真值= -000 0001 = -1

2. 基本概念

在探求为何机器要使用补码之前,让我们先了解原码,反码和补码的概念,对于一个数,计算机要使用一定的编码方式进行存储。

原码、反码、补码是机器存储一个具体数字的编码方式。

原码、反码、补码是计算机原理的术语,说白了就是为了理解计算机2进制用的。

3. 数据的存储方法

数据在计算机内部是以补码的形式储存的

数据分为有符号数和无符号数,

对于正数:补码 = 反码 = 原码

对于负数:反码 = 原码 符号位不变,其余各个位取反

补码 = 反码+1

原码:就是符号位加上其真值的绝对值,即用第一位表示符号,其余位表示值。

因为第一位是符号位,所以8位二进制数的取值范围就是:

[1111 1111,0111 1111] = [-2^8-1,2^8-1] = [-127,127];

[1000 0000表示-128 ~ 0111 1111表示127] 一个字节(-128~127)

反码:

如果是正数:正数的反码等于原码

如果是负数:除符号位不变,其它位按位取反(1变0;0变1)

补码:

如果是正数:正数的补码等于原码

如果是负数:在原码基础上符号位不变,其它各位取反,最后再+1

(根据补码求原码:补码-1=反码,反码取反=原码;要根据原码求数值)

对于负数,补码/反码表示方式人脑无法直接观看出其数值的。通常需要转换成原码再计算其数值。

4. 数据(±1)在内存中存储细节:

64位计算机上,int类型占用4个字节,每个字节8位;

计算机存储±1要使用32位的二进制数码,存储的都是补码。

1d03823c8af0c141d84eabfa6fc07606.png

5. 为什么要引入反码和补码?

让计算机能够做减法

减法的电路设计更简单

减去一个正数等于是加上一个负数。机器可以只有加法而没有减法。

如:用原码(反码)进行减法运算,1 – 1 = - 0

用补码进行减法运算:1 – 1=1 +(-1)= 0

位运算符

位运算:用于整数的二进制位之间的运算。

计算机是以其补码的形式存储数据,负数以补码形式表示为二进制数。位运算:是补码之间的运算!

计算机里要根据原码去算十进制数值!!!

【& 按位与】

816a821a3a245bd293471df602af7d84.png

【| 按位或】

b90ff4a7caf8f28104722b6f6bac0617.png

【~ 按位取反】

ed67a96ba70239fb19363cabbc0fd906.png

【^ 按位异或】

50ba57a398d29433414c434f86f59c77.png

【<< 左移位】

9f674b128212f1523546cb23e3c975e9.png

【>> 右移位】

3c8aae7a343661a2ee1f24607ed1f8cc.png

内容来源于网络如有侵权请私信删除

今天的文章 c语言printf("%-8dn",1234);输出的是什么,【C语言篇】☞ 8. 进制、原码、反码、补码...分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2025-01-03 18:11
下一篇 2025-01-03 18:06

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/100428.html