Type conversion warning after bitwise operations in C
问题 How do you explain that line 7 gets a warning, but not line 5 or line 6? int main() { unsigned char a = 0xFF; unsigned char b = 0xFF; a = a | b; // 5: (no warning) a = (unsigned char)(b & 0xF); // 6: (no warning) a = a | (unsigned char)(b & 0xF); // 7: (warning) return 0; } GCC 4.6.2 output when compiled on 32-bit architecture (Windows PC): gcc -c main.c --std=c89 -Wall -Wextra -Wconversion -pedantic main.c: In function 'main': main.c:7:11: warning: conversion to 'unsigned char' from 'int'