Combining illegal_bins with default

Hello All,
I am trying to write explicit bins for IO commands with size as multiple of 512 ( upto 256K ). I am aware that with clause helps us define bins for such scenarios
Other values of io_size are illegal

// Asume 'io_size' is 19-bit
coverpoint tr.io_size {          
                    bins io_size[]   = {[512:262144]} with ( item % 512 == 0 );
            // Non-multiple of 512 and all values greater than 256K are illegal
            illegal_bins io_size_ill = default ;                       }

As per LRM ::
“The default specification defines a bin that catches the values of the coverage point that do not lie within any of the defined bins. The default is useful for catching unplanned or invalid values.”

(Q1) Would this mean that for io_size values from [0:511] , [513:255] , … [ 2,62,145:524287] would fall under default ?

(Q2) Can illegal_bins be combined with default bins ?

(Q3) Would this an alternative for illegal_bin ‘io_size_ill’ ? ::

// Asume 'io_size' is 19-bit
coverpoint tr.io_size {          
                    bins io_size[]   = {[512:262144]} with ( item % 512 == 0 );
            // Non-multiple of 512 and all values greater than 256K are illegal
            illegal_bins io_size_ill = {[0:$]} with ( item % 512 != 0 );                      
                      }

(Q4) For the explicit bins ‘io_size’ what is the bit width used for the state values ?

// Asume 'io_size' is 19-bit
coverpoint tr.io_size {          
                  bins io_size[] = {[512:262144]} with ( item % 512 == 0 );
                      }

(a) Do the state values 512 , 262144 ( as well as value 512 within with_clause ) use 19-bit width ( as 'io_size is 19-bit ) ?

(b) Can user specify the values in non-decimal format eg: hexadecimal or octal

// Asume 'io_size' is 19-bit
coverpoint tr.io_size {          
                  bins io_size[] = {['h200:'h40000]} with ( item % 'h200 == 0 );
                      }

Would the hexadecimal values use 19-bit-width ?

A default bin expression means a coverpoint was sampled and no other explicit bin values match.

Q1: yes
Q2: yes. (ignore_bins cannot be combined with default)
Q3: not exactly. It does not catch values greater than 256K that are divisable by 512. You would need another illegal_bin to catch all numbers between 262145: 524287.
Q4: the coverpoint expression defines the size that all bin expressions get evaluated. See section 19.5.7 Value resolution
Literal numbers can be expressed in any radix.