【求助】代码中的这个用法是什么意思

2019-03-26 12:29发布

各位大神大家好,目前在阅读代码时,发现有这么一个用法【f->keep_last = !!keep_last;】这个【!!】是个什么意思?这么用有什么好处呢?
  1. static int frame_queue_init(FrameQueue *f, PacketQueue *pktq, int max_size, int keep_last)
  2. {
  3.     int i;
  4.     memset(f, 0, sizeof(FrameQueue));
  5.     if (!(f->mutex = SDL_CreateMutex())) {
  6.         av_log(NULL, AV_LOG_FATAL, "SDL_CreateMutex(): %s ", SDL_GetError());
  7.         return AVERROR(ENOMEM);
  8.     }
  9.     if (!(f->cond = SDL_CreateCond())) {
  10.         av_log(NULL, AV_LOG_FATAL, "SDL_CreateCond(): %s ", SDL_GetError());
  11.         return AVERROR(ENOMEM);
  12.     }
  13.     f->pktq = pktq;
  14.     f->max_size = FFMIN(max_size, FRAME_QUEUE_SIZE);
  15.     f->keep_last = !!keep_last;
  16.     for (i = 0; i < f->max_size; i++)
  17.         if (!(f->queue[i].frame = av_frame_alloc()))
  18.             return AVERROR(ENOMEM);
  19.     return 0;
  20. }
复制代码


此帖出自Linux与安卓论坛
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
lcofjp
1楼-- · 2019-03-26 15:40
这就是一个整型转布尔型的操作,把一个整型数转成0或者1.
ywlzh
2楼-- · 2019-03-26 19:57
 精彩回答 2  元偷偷看……
Bingqi23
3楼-- · 2019-03-26 20:11
ywlzh 发表于 2016-7-1 17:24
两个!是为了把非0值转换成1,而0值还是0




举个例子:





  !在以中叫“取非”运算符,属于 ...

嗯嗯,懂了。谢谢
Bingqi23
4楼-- · 2019-03-27 00:54
lcofjp 发表于 2016-7-1 13:56
这就是一个整型转布尔型的操作,把一个整型数转成0或者1.

嗯嗯,明白了。十分感谢。
汤权
5楼-- · 2019-03-27 05:52
 精彩回答 2  元偷偷看……

一周热门 更多>