一道超偏的c++面试题: (int&)a

 float a = 1.0f;
cout << (int)a << endl;
cout << (int&)a << endl; 
cout << boolalpha << ( (int)a == (int&)a ) << endl; // (1)输出什么?

float b = 0.0f;
cout << (int)b << endl;
cout << (int&)b << endl;
cout << boolalpha << ( (int)b == (int&)b ) << endl;// (2)输出什么?

        输出结果是:
        1
        1065353216
        false
        0
        0
        true

      

 

答:(1)(2)分别输出false和true。注意转换的应用。(int)a实际上是以浮点数a为参数构造了一个整型数,该整数的值是1,(int&)a则是告诉编译器将a当作整数看(并没有做任何实质上的转换)。因为1以整数形式存放和以浮点形式存放其内存数据是不一样的,因此两者不等。对b的两种转换意义同上,但是0的整数形式和浮点形式其内存数据是一样的,因此在这种特殊情形下,两者相等(仅仅在数值意义上)。
注意,程序的输出会显示(int&)a=1065353216,这个值是怎么来的呢?前面已经说了,1以浮点数形式存放在内存中,按ieee754规定,其内容为0x0000803F(已考虑字节反序)。这也就是a这个变量所占据的内存单元的值。当(int&)a出现时,它相当于告诉它的上下文:“把这块地址当做整数看待!不要管它原来是什么。”这样,内容0x0000803F按整数解释,其值正好就是1065353216(十进制数)。
通过查看汇编代码可以证实“(int)a相当于重新构造了一个值等于a的整型数”之说,而(int&)的作用则仅仅是表达了一个类型信息,意义在于为cout<<及==选择正确的重载版本。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当谈到C++面试题中的网络编程,以下是一些常见的问题和答案: 1. 什么是套接字(Socket)? 套接字是一种用于网络通信的编程接口,它提供了一种机制,使得不同主机上的进程可以通过互联网进行通信。 2. TCP和UDP的区别是什么? TCP(传输控制协议)是一种面向连接的协议,它提供可靠的数据传输和流控制。UDP(用户数据报协议)是一种无连接的协议,它提供了一种简单的、无保证的数据传输方式。 3. 如何在C++中创建一个TCP套接字? 在C++中,可以使用socket()函数创建一个TCP套接字。例如: ``` #include <sys/socket.h> int sockfd = socket(AF_INET, SOCK_STREAM, 0); ``` 4. 如何在C++中创建一个UDP套接字? 在C++中,可以使用socket()函数创建一个UDP套接字。例如: ``` #include <sys/socket.h> int sockfd = socket(AF_INET, SOCK_DGRAM, 0); ``` 5. 如何将套接字绑定到特定的IP地址和端口? 可以使用bind()函数将套接字绑定到特定的IP地址和端口。例如: ``` #include <sys/socket.h> #include <netinet/in.h> struct sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_addr.s_addr = INADDR_ANY; addr.sin_port = htons(1234); bind(sockfd, (struct sockaddr*)&addr, sizeof(addr)); ``` 6. 如何在C++中使用套接字进行TCP客户端编程? 可以使用connect()函数连接到服务器,并使用send()和recv()函数发送和接收数据。例如: ``` #include <sys/socket.h> #include <netinet/in.h> int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in serverAddr; serverAddr.sin_family = AF_INET; serverAddr.sin_port = htons(1234); serverAddr.sin_addr.s_addr = inet_addr("服务器IP地址"); connect(sockfd, (struct sockaddr*)&serverAddr, sizeof(serverAddr)); ``` 这些是一些常见的C++网络编程面试问题。在面试前,建议你深入了解这些概念,并准备好相关的代码示例和解释。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值