二进制¶
前置知识¶
十进制
目标¶
十进制、二进制、八进制、十六进制之间的转换
有符号、无符号
二进制¶
数字电子电路中,逻辑门直接采用了二进制,因此现代的计算机和依赖计算机的设备里都用到二进制。每个数字称为一个比特(二进制位)或比特(Bit,Binary digit 的缩写)
十进制转二进制,短除法¶
十六进制¶
十六进制,简写hex,在数学中是一种逢 16 进 1 的进位制。一般用数字 0 到 9 和字母 A 到 F 来表示。
在计算机领域,因为将 4 个比特(Bit)化成单独的 16 进制数字不太困难。
1个字节(Byte)可以表示成 2 个连续的 16进制数字。
可是,这种混合表示法容易令人混淆,因此需要一些前缀、后缀或者下标来显示。
表示方式
十六转二,二转十六
有符号数、无符号数¶
用来表示有符号数,数的范围就是 \(-(2^{n - 1} - 1)\) 到 \(2^{n-1} - 1\) 。当 \(n = 8\) 时, 这个范围就是 \(-127\) 到 \(+127\)
在不需要考虑数的正负时,就不需要用一位来表示符号位,n 位机器数全部用来表示数值,这是表示数的范围就是 到 \(0\) 到 \(2^n - 1\) 。当 \(n = 8\) 时,这个范围就是 \(0\) 到 \(255\)
int x; // 有符号整型,占4个字节,32位,[-2147483648, 2147483647]
usigned int x; // 无符号整型,占4个字节,32位,[0, 4294967295]
char c; // 有符号字符类型,占1个字节,8位,[-128, 127]
unsigned char c; // 无符号字符类型,占1个字节,8位, [0, 255]
unsigned char 在计算机中使用补码存储
unsigned char c = 0xF7;
c 在计算机中存储的方式为:11110111
int/unsigned int 变量赋值给 unsigned char
变量是会发生字节截断(9位和高于9位的将被程序自动丢弃)
unsigned int a = 0xFFFFFFF7;
unsigned char b = (unsigned char)a;
此时b的值为 0xF7
对于(signed)char来说,0x80用二进制表示为1000 0000,
当它作为char赋值给unsigned int或 int 时,系统认为最高位是符号位,会对最高位进行扩展。
而0x7F用二进制表示为0111 1111,最高位为0,不会扩展。
对于unsigned char来说,不管最高位是0,还是1,都不会做扩展。
// 关键词:拓展、截断
总结¶
十进制、二进制、八进制、十六进制之间的转换
有符号、无符号
参考¶
《算法进阶指南》