-
only on integral types.
-
The type
unsigned int
may be abbreviated asunsigned
. -
可使认为纯二进制非补码
-
跟其他类型不同
character
三个是分开的,但是总的还是分为有符号和无符号。至于哪两个是一样的,这取决于 compiler. -
但实际上,
unsigned
的初衷不是为了扩展正数, 而是为了做纯二进制运算, 主要是为了移位
⚠️How to specify whether signed
?
🔗Specifying the Type of a Literal
补码
用于表述负数
- 正数和0 ➡️ 补码人为规定为原码, 不是说计算得到的补码等于原码 (计算得到的补码其实是其负数)
- 负数 ➡️ 绝对值二进制按位取反加一, 或者”0-a”
- 可以使用保留字 “unsigned” 来使二进制认为是纯二进制, 而非补码
(由于补码的运算特点得到)首位符号位, 0代表正数, 1代表负数 正数不需要考虑补码(或者说正数的补码就是原码)直接就是二进制数表示 负数要考虑这是个补码, 那么代表的数回算得到(但是不考虑这是个补码的话, 这是一个正数 所以说都是二进制, 取决于我怎么看)
🌰比如: 我令一个整数类型 jhl
sizeof(jhl)=0.5
jhl 的取值就是 -87
unsigned jhl 的取值是 015
0000 ⇒ 0
11111000 ⇒ -1 ~ -8
000001111 ⇒ 1 ~ 7
1 ~ 7 , -8 ~ -1 想象, 这是一个环
char a=255;
printf("a=%d\n",a); // a=-1
printf("a=%u\n",a); // a=4294967295
可以看到, 对于(signed)char 255会让a体现为-1 拿到printf会一律转为int下的-1(升格了, 不是单纯的补0) 那么以(signed)int 来看, 就是-1 以 unsigned int 来看, 就是
例子比大小
==⚠️ 注意:为了表达和理解方便,这里用 char
作为最高,要记住实际上是 int
==
以下表达式都为 true
0 == 0u // 0000 0000 = 0000 0000
-1 < 0 // 1111 1111 < 0000 0000. MSB as sign bit, negative
-1 > 0u // 1111 1111 > 0000 0000. MSB as a part of the number, positive
127 > -127-1 // 0111 1111 > 1000 0000. MSB as sign bit, negative
127u < -127-1 // 0111 1111 < 1000 0000. MSB as a part of the number, positive
127 > (char)128u // 0111 1111 > 1000 0000. MSB as sign bit, negative
-2 < -1 // 1111 1110 < 1111 1111. MSB as sign bit, negative
-2 < (unsigned)-1 // 1111 1110 < 1111 1111. MSB as a part of number, positive
🤝 计算机组成当中,请解释关于32位计算机反常的比大小