cherry42 发表于 2022-7-18 18:09:03

字符串的格式化%d %u区别

请问字符串的格式化操作中,%d 和%u有什么具体差别?%u的无符号十进制数是什么意思?

非常感谢!

wp231957 发表于 2022-7-18 18:13:48

字面意思,没有符号位

qiuyouzhi 发表于 2022-7-18 18:14:43

无符号:只能是正数,无负号

jackz007 发表于 2022-7-18 19:04:58

本帖最后由 jackz007 于 2022-7-18 23:05 编辑

      C 语言的整型数分为有符号整型数和无符号整型数,对于 32 位整型数而言,其表达空间为 2 ^ 32 = 4294967296,就是说,32 个二进制位总共可以表达出 4294967296 个不同的数值。对于无符号整数而言,这个空间可表达的数值范围为 0 ~ 4294967295,一共 4294967296 个;对于有符号整数而言,整个表达空间被平分成两部分,其中,前半部分 2147483648 个用于表达正整数,可表达数值范围为 0 ~ 2147483647,后半部分 2147483648 个用于表达负整数,可表达数值范围为 - 2147483648 ~ -1。这就意味着在计算机内部,同一个 32 位整型数,依据数据类型(有符号、无符号)的不同,可能具有不同的数值。

      %d 和 %u 都是 C 语言的输入输出格式描述符,前者的意思是按有符号十进制整型数的形式解释变量数值,后者当然是按无符号十进制整型数的形式解释变量的数值。

#include <stdio.h>

int main(void)
{
      int a = 0x7fffffff , c = a + 1                        ;
      printf("a = 0x%x , c = 0x%x\n" , a , c)               ;
      printf("a = %d , c = %d\n" , a , c)                   ;
      printf("unsigned a = %u , unsigned c = %u\n" , a , c) ;
}
      编译、运行实况:
D:\\C>g++ -o x x.c

D:\\C>x
a = 0x7fffffff , c = 0x80000000
a = 2147483647 , c = -2147483648
unsigned a = 2147483647 , unsigned c = 2147483648

D:\\C>

suchocolate 发表于 2022-7-19 08:49:25

Why so many people just asking instead of learning basic knowledge?
https://www.runoob.com/python3/python3-string.html
页: [1]
查看完整版本: 字符串的格式化%d %u区别