zoukankan      html  css  js  c++  java
  • C++的char是有符号还是无符号

    刚毕业找工作面试遇到这个问题,正确答案是“不一定,与编译器相关”。这个结论是我在工作多年后才知道的。

    C++标准中列出了三种类型:(plain) char, signed char 和 unsigned char。第一种就是普通的char不加前缀,实际对应后两种实现的其中一种,取决于编译器,有的甚至提供编译选项指定是否有符号。我猜测实际中大多数都是对应signed有符号的版本。

    与此不同的是,size_t在C或者C++标准中明确指出是无符号,而ssize_t是有符号的。

    对于原先的问题,其实换一个问法更好:如何通过代码验证char是否有符号?

    下面是一个简单实现:

     1 #include <iostream>
     2 
     3 template<class T> bool isSigned() { return (T)-1 < (T)0; }
     4 
     5 int main()
     6 {
     7     std::cout << isSigned<char>() << std::endl;
     8     std::cout << isSigned<signed char>() << std::endl;
     9     std::cout << isSigned<unsigned char>() << std::endl;
    10     return 0;
    11 }

    我在Windows上用g++编译的程序输出是1 1 0.

  • 相关阅读:
    git
    浏览器喧嚷过程
    B/S架构与C/S架构
    simpleDateFormat
    oracle中case when的用法
    Java程序利用Jdbc连接数据库
    List 和 Set与Map
    队列和栈
    toString方法分析
    java中的构造器
  • 原文地址:https://www.cnblogs.com/xrst/p/13246821.html
Copyright © 2011-2022 走看看