• only on integral types.

  • The type unsigned int may be abbreviated as unsigned.

  • 可使认为纯二进制非补码

  • 跟其他类型不同 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位计算机反常的比大小