unsigned 赋值负数输出情况 & printf输出格式

%d 有符号10进制整数  
%ld 长整型
%hd短整型
%i 有符号10进制整数
%o 无符号8进制整数
%u 无符号10进制整数
%x 无符号的16进制数字,并以小写abcdef表示
%X 无符号的16进制数字,并以大写ABCDEF表示
%F/f 浮点数 %E/e 用科学表示格式的浮点数
%g 使用%f和%e表示中的总的位数表示最短的来表示浮点数 G 同g格式,但表示为指数
%c 单个字符
%s 字符串

 unsigned int a = -1; 
 unsigned short b = -1;
 unsigned char c = -1;
 printf("%u, %d, %d, ",a,b,c);
输出:4294967295, 65535, 255,

 unsigned int a = -1; 
 unsigned short b = -1;
 unsigned char c = -1;
 printf("%d, %d, %d, ",a,b,c);
输出:-1, 65535, 255,
a定义为unsigned 输出应该和上面的一样为4294967295啊
因为%d是按int输出,所以后面两个数的存储仍然是按照所存储二进制输出,没有涉及到int最高位的符号位

    /*
    us的二进制表示是0xffff,以4个字节的int类型输出时表示的是0x0000ffff,所以输出65535
    un的二进制表示是0xffffffff,以4个字节的int类型输出时表示的是-1,所以输出-1
   
*/ 


 unsigned int a = -1; 
 unsigned short b = -1;
 unsigned char c = -1;
 printf("%d, %hd, %d, ",a,b,c);
输出:-1, -1, 255,

啊,各种地方都需要注意啊


如果使用cout来输出:

 cout<< a<<endl;
 cout<< b<<endl;
 cout<< c<<endl;
输出:4294967295, 65535,
c我如果为-1没有输出,如果是0-255之间为对应的ascii码

  
    cout<<us<<endl;   // -1在无符号的short数据中是65535 
    cout<<un<<endl;   // -1在无符号的int数据中是4294967295

原文地址:https://www.cnblogs.com/wwjdwy/p/3387648.html